看到函数最有一集,有一个疑问不太明白,请大佬帮忙教导一下啊
在函数最后一集中,有一个调用函数的题目,输入一个字符串,接着输入一个字符,最后输出删除这个字符之后的字符串。分为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: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'
左边是删除前,右边是删除后 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了哎。。。没搞懂啊= = hr195105 发表于 2022-3-5 01:50
还是不太理解,,,
for(i=j=0;ch!='\0';i++)
{
ch = ch;
你理解错了,这里j++后j的值发生变化,但是j++确不变 本帖最后由 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' 的效果。 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]