有没有人能帮我讲解一下这个C语言程序的执行过程?

我没看懂这个程序是如何完成将字符串s中所有的字符c删除的功能的,从if下面开始就看不懂了,s[i]和s[j]不都是同一个数组吗?#include"stdio.h"main... 我没看懂这个程序是如何完成将字符串s中所有的字符c删除的功能的,从if下面开始就看不懂了,s[i]和s[j]不都是同一个数组吗?
#include"stdio.h"
main()
{ char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)
if (s[i]!='c')
s[j++]=s[i];
s[j]='\0';

puts(s);}
展开
 我来答
小黑哎啊
科技发烧友

2020-04-04 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:1642
采纳率:74%
帮助的人:351万
展开全部

#include"stdio.h"

main()

{ char s[80];

int i,j;

gets(s);

for(i=j=0;s[i]!='\0';i++)//这里只有i++,j++在下面,j不随for循环自加1 

if (s[i]!='c') 

s[j++]=s[i];//每有一个不为'c'的单位出现,j自加1;并且该单位的值,重新赋值给数组s,从s[0]开始,因为j初值为0 

else//这加个else便于理解,等价于源代码;该单位的值为'c',就向该单位赋予空值; 

s[j]='\0'; 

puts(s);

}//例如输入abcdec,分别占据s[0]='a',s[1]='b',s[2]='c',s[3]='d',s[4]='e',s[5]='c';

//s[0](j==0),s[1](j==1)还是赋值在原位,

//s[2](这if不成立,j不自加1)s[2]='\0',

//s[3]不为'c'(j==2),所以'd'就赋给了s[2];

//s[4](j==3),'e'赋予s[3],

//s[5]='\0',赋空值; 

晨曦露下
2020-04-04 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:196
采纳率:70%
帮助的人:32.2万
展开全部
我举个例子啊,比如acd,首先从第一个开始,s0=a,不是c,则把a赋值给s0,同时执行j++命令,j=1,数组元素不变,然后s1=c不执行j++命令,则j仍然=1,数组元素不变,最后,s2=d,而此时j=1,所以把d赋值给s1,数组变成add,最后执行j++命令,j=2,执行sj='\0'即s2='\0',最后得到ad'\0'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AlwaysSucceedD
2020-04-16 · 超过30用户采纳过TA的回答
知道答主
回答量:179
采纳率:40%
帮助的人:28.9万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式