C语言函数问题,里面的for循环,开始是str[0]=str[0],还是str[1]=str[0],str[j++]开始是str[1]吗

#include <stdio.h> //帮我分析下这段程序的执行过程
void delete_string (char str[],char ch)
{
int i,j;
for (i=j=0;str[i]!='\0';i++)
if (str[i]!=ch)
str[j++]=str[i];
str[j]='\0';
}

j++,是先取j的值(这里就是作为数组下标),再自增。
for循环初始语句,i和j都赋值为0,所以第一次str[j++]=str[i]的时候,相当于
str[0]=str[0];
j++;
str[j++]开始是str[0]。
你这个函数的功能是找出并删除字符串中的指定字符。追问

当运行到str[j]='\0'; 程序应该终止了吧

追答

是的,str[j]='\0'不在for循环体内,执行完这语句,就退出函数了。

追问

我明白了,整个原理就是用上个字符替代原有字符,而不是真正的删除它,可以真正删除一个字符吗,难道原理也是用空格代替

追答

数组被定义下来以后,其内存空间是不能被“删除”的,所谓删除字符串中的一个字符,只不过是让字符串以另一种形式显示出来。如果删除某个字符以空格代替,那该字符原来的地方就变成一个空格,如果是删除后连位置都没有了,那就是你这个函数的做法,把后面的字符往前移,覆盖被删除字符的位置。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-10
j++先执行j,然后j=j+1.所以开始是str[0]=str[0];
相似回答