hr195105 发表于 2022-3-4 23:24:25

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

在函数最后一集中,有一个调用函数的题目,输入一个字符串,接着输入一个字符,最后输出删除这个字符之后的字符串。
分为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;
        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!='\0';i++)
        {
                if(ch != c)
                {
                        ch = ch;
                       
                }
        }
        ch = '\0';
}


在第二步中我有点不理解,输入一个字符,如果ch != c,则ch = ch;      这样的话不是会将字符串的ch给覆盖了嘛。比如说输入了一串字符yi chuan zi fu,我输入了 i,第一次循环ch != c,进入if ,将ch=ch,这样的话i不就被覆盖成y了嘛。。。。

jackz007 发表于 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'
      左边是删除前,右边是删除后

hr195105 发表于 2022-3-5 01:50:15

jackz007 发表于 2022-3-4 23:43
左边是删除前,右边是删除后

还是不太理解,,,
for(i=j=0;ch!='\0';i++)
{
if(ch != c)
{
ch = ch;
}
}
主要是这一段,首先我们的字符串ch[]=yi chuan zi fu,ch=y,所以ch!=c进入if,进入之后ch=ch,这不是把ch上原来的i给覆盖成y了嘛。。就变成yy chuan zi fu了嘛。。接着ch=y != c,进入if,ch=ch,又把空格变成y了不是嘛。。变成yyychuan zi fu了哎。。。没搞懂啊= =

wp231957 发表于 2022-3-5 06:54:20

hr195105 发表于 2022-3-5 01:50
还是不太理解,,,
for(i=j=0;ch!='\0';i++)
{


ch = ch;
你理解错了,这里j++后j的值发生变化,但是j++确不变

jackz007 发表于 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 为 'y',ch 为 'i',只有 ch = ch,ch = ch,不可能有 ch = ch 这样的赋值!
       起初,读索引 i 和写索引 j 的值是同步变化的(i、j 数值相等),只有当 i = 3 时,ch[i] 为 'c' ,会空循环一次,从而使读索引(i)越过字符 'c',而写索引(j)未动,造成后续的读写索引错位,最终达到从 ch[] 中删除字符 'c' 的效果。

hr195105 发表于 2022-3-5 20:51:45

jackz007 发表于 2022-3-5 10:56
ch 为 'y',ch 为 'i',只有 ch = ch,ch = ch,不可能有 ch = ch 这 ...

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

这样理解对嘛
页: [1]
查看完整版本: 看到函数最有一集,有一个疑问不太明白,请大佬帮忙教导一下啊