C++循环问题
没有分了,但还有点疑问,希望您能帮忙,按照您的意思b[j]='\0'也应该属于for的循环体加上if不用大括号吗?还有就是如何不满足for循环条件,应该执行for以后的语...
没有分了,但还有点疑问,希望您能帮忙,按照您的意思 b[j]='\0'也应该属于for的循环体加上if不用大括号吗?还有就是如何不满足for循环条件,应该执行for以后的语句,那么假如说for循环条件变为b[i]!=c,那么对于am来说a不符合循环,执行for以后的语句,则m如何办,循环已经结束了吗?
展开
展开全部
楼主您好,没有分数不要紧,我们是交流C,分数都是浮云哦,贵在共同进步~~呵呵 很高兴和您交流,回答如下:
问题1:可能之前的回答不到位,让您造成了这个小细节上的误会。 b[j]='\0'不属于for循环体的一部分。这个时候for循环已经结束,所以这时候的j已经经历了12次自加,从0已经变成了12,(关于这个您可以在后面我附上的程序里看明白),所以这句话是说b[12]='\0'.这是说我们已经得到了去掉字符串中所有的字符a之后的字符串b了,在完成所有工作之后最末尾部加上结束标志'\0'.
问题2:
楼主的问题透漏出又有一个细节我解释不到位,让楼主没有搞清楚。
“对于am来说a不符合循环”,这句话不对,对于am来说a是符合循环条件的。因为a前面是个空格,空格在ascII码制表里面的ASCII值是032,转义表示是\0x20,而'\0'对应的ascII码是0,表示的是NULL,就是什么都没有,表示四大皆空。换言之,在屏幕上你打印一个printf("\0x20")会输出一个空格,你的光标位置就会右移一位,但是你用printf("\0");会发现光标位置也没变,什么现象都没有,对吧?
附代码:
/***************************************************/
for(i=0,j=0;b[i]!='\0';i++)
if(b[i]!=c)
{
b[j]=b[i];
j++;
//cout<<"dsa\n";
}
b[j]='\0';
}
/*****************************************/
上述代码等价于:
/*************************************/
for(i=0,j=0;b[i]!='\0';i++)
{ //for的作用范围
if(b[i]!=c)
{
b[j]=b[i];
j++;
//cout<<"dsa\n";
}
} //for的作用范围
b[j]='\0';
}
/***********************************************/
楼主为了验证上述观点,可以在 j++;之后加上一句cout<<"dsa\n";
这样运行发现输出了12行的字符dsa对吧?这就说明这句话在for的作用范围之内对吧?
希望楼主有所收获,一起进步哦
问题1:可能之前的回答不到位,让您造成了这个小细节上的误会。 b[j]='\0'不属于for循环体的一部分。这个时候for循环已经结束,所以这时候的j已经经历了12次自加,从0已经变成了12,(关于这个您可以在后面我附上的程序里看明白),所以这句话是说b[12]='\0'.这是说我们已经得到了去掉字符串中所有的字符a之后的字符串b了,在完成所有工作之后最末尾部加上结束标志'\0'.
问题2:
楼主的问题透漏出又有一个细节我解释不到位,让楼主没有搞清楚。
“对于am来说a不符合循环”,这句话不对,对于am来说a是符合循环条件的。因为a前面是个空格,空格在ascII码制表里面的ASCII值是032,转义表示是\0x20,而'\0'对应的ascII码是0,表示的是NULL,就是什么都没有,表示四大皆空。换言之,在屏幕上你打印一个printf("\0x20")会输出一个空格,你的光标位置就会右移一位,但是你用printf("\0");会发现光标位置也没变,什么现象都没有,对吧?
附代码:
/***************************************************/
for(i=0,j=0;b[i]!='\0';i++)
if(b[i]!=c)
{
b[j]=b[i];
j++;
//cout<<"dsa\n";
}
b[j]='\0';
}
/*****************************************/
上述代码等价于:
/*************************************/
for(i=0,j=0;b[i]!='\0';i++)
{ //for的作用范围
if(b[i]!=c)
{
b[j]=b[i];
j++;
//cout<<"dsa\n";
}
} //for的作用范围
b[j]='\0';
}
/***********************************************/
楼主为了验证上述观点,可以在 j++;之后加上一句cout<<"dsa\n";
这样运行发现输出了12行的字符dsa对吧?这就说明这句话在for的作用范围之内对吧?
希望楼主有所收获,一起进步哦
参考资料: II
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询