鱼C论坛

 找回密码
 立即注册
查看: 2600|回复: 5

看到函数最有一集,有一个疑问不太明白,请大佬帮忙教导一下啊

[复制链接]
发表于 2022-3-4 23:24:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在函数最后一集中,有一个调用函数的题目,输入一个字符串,接着输入一个字符,最后输出删除这个字符之后的字符串。
分为4个代码
mian如下

#include <stdio.h>
extern char enter_string(char input[]);
extern char delete_string(char ch[],char c);
extern char printf_string(char out[]);
void main()
{
       
        char c;
        char str[255];
        enter_string(str);                //num1
        scanf("%c",&c);
        delete_string(str,c);                //num2
        printf_string(str);                //num3
       
}

第二部如下

#include <stdio.h>
char delete_string(char ch[],char c)
{
        int i,j;
        for(i=j=0;ch[i]!='\0';i++)
        {
                if(ch[i] != c)
                {
                        ch[j++] = ch[i];
                       
                }
        }
        ch[j] = '\0';
}


在第二步中我有点不理解,输入一个字符,如果ch[i] != c,则ch[j++] = ch[i];        这样的话不是会将字符串的ch[j++]给覆盖了嘛。比如说输入了一串字符yi chuan zi fu,我输入了 i,第一次循环ch[0] != c,  进入if ,将ch[1]=ch[0],这样的话i不就被覆盖成y了嘛。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-4 23:43:00 | 显示全部楼层
本帖最后由 jackz007 于 2022-3-4 23:44 编辑
ch[] = "yi chuan zi fu"
c = 'c'

'y' <- 'y'
'i' <- 'i'
' ' <- ' '
'c' <- 'h'
'h' <- 'u'
'u' <- 'a'
'a' <- 'n'
'n' <- ' '
' ' <- 'z'
'z' <- 'i'
'i' <- ' '
' ' <- 'f'
'f' <- 'u'
'u' <- '\0' 
      左边是删除前,右边是删除后
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-5 01:50:15 | 显示全部楼层
jackz007 发表于 2022-3-4 23:43
左边是删除前,右边是删除后

还是不太理解,,,
for(i=j=0;ch[i]!='\0';i++)
{
if(ch[i] != c)
{
ch[j++] = ch[i];
}
}
主要是这一段,首先我们的字符串ch[]=yi chuan zi fu,ch[0]=y,所以ch[0]!=c进入if,进入之后ch[1]=ch[0],这不是把ch[1]上原来的i给覆盖成y了嘛。。就变成yy chuan zi fu了嘛。。接着ch[1]=y != c,进入if,ch[2]=ch[1],又把空格变成y了不是嘛。。变成yyychuan zi fu了哎。。。没搞懂啊= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-5 06:54:20 From FishC Mobile | 显示全部楼层
hr195105 发表于 2022-3-5 01:50
还是不太理解,,,
for(i=j=0;ch!='\0';i++)
{

ch[j++] = ch[i];
你理解错了,这里j++后j的值发生变化,但是j++确不变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-5 10:56:59 | 显示全部楼层
本帖最后由 jackz007 于 2022-3-5 11:09 编辑
hr195105 发表于 2022-3-5 01:50
还是不太理解,,,
for(i=j=0;ch!='\0';i++)
{


       ch[0] 为 'y',ch[1] 为 'i',只有 ch[0] = ch[0],ch[1] = ch[1],不可能有 ch[1] = ch[0] 这样的赋值!
       起初,读索引 i 和写索引 j 的值是同步变化的(i、j 数值相等),只有当 i = 3 时,ch[i] 为 'c' ,会空循环一次,从而使读索引(i)越过字符 'c',而写索引(j)未动,造成后续的读写索引错位,最终达到从 ch[] 中删除字符 'c' 的效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-5 20:51:45 | 显示全部楼层
jackz007 发表于 2022-3-5 10:56
ch[0] 为 'y',ch[1] 为 'i',只有 ch[0] = ch[0],ch[1] = ch[1],不可能有 ch[1] = ch[0] 这 ...


哦哦 我明白了 这里的j++第一次循环的时候还是0,之后再j++
就是说
ch[j++] = ch;等同于
ch[j]=ch[i];
j++;

这样理解对嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 12:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表