C语言实现去掉字符串行首和行尾的空字符,但字符之间的空字符保留。请详细解释一下这段代码的作用。

输入输出如下

第1个循环,变量i的值是字符串最后一个字符的下标开始,每次循环减1,即向前逐个字符进行判断,条件是isspace(str[i]),如果是空格就再次减1,否则不是空格则退出循环,退出循环时,i指向字符串末尾第1个非空格的字符,字符串需要在这个字符之后结束,所以给str[i+1]赋值字符串结束符0。
第2个循环i是从字符串第1个字符开始,每次循环i加1,找到紧跟着的下一字符位置,如果遇到不是空格的字符时,停止循环,退出循环是i指向字符串第1个非空格字符位置
由于第1个循环已经将字符串结束符赋值给了字符串结尾非空格字符之后位置元素,所以从str+i开始的字符串就是去掉了首尾连续字符后的字符串了。
输出字符串后,可以继续输入新的字符串,直到输入END或直接输入回车后,程序停止运行,退出while循环,这是while循环体最后一个if语句的作用。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-11

追问

先谢谢你。我现在还没有学指针,那个printf里的"%s\n",&str[i]不太懂

追答

这个就是取地址,也就是str字符串的第i个位置开始的地址(因为0-i为空格,所以不用显示)

追问

直接用printf"%s\n",str[i]不行吗?

本回答被提问者和网友采纳
相似回答