C语言 简单的练习题

void word(char *p)
{
int begin,end,i = 0;
for(begin=0; isspace( *(p+begin) ) ;begin++) continue;
for(end=begin; !isspace( *(p+end) ) ;end++) continue;
*(p+end) = '\0';
for(; *(p + begin) != '\0'; p++)
*p = *(p + begin);
*p = '\0';
}
读取输入行里的第一个单词到数组,并丢掉该行中的其他的字符,单词是一串字符,其中不包含空格,制表符和换行符。
最后一行*p = '\0'; 什么意思,为什么去掉了还会输出?*(p+end) = '\0';这句加上了不是不会继续输出了吗。

第1个回答  2013-04-08
最后一行*p = '\0';可以省去,因为此时的*p与先前的*(p+end)说的应是同一位置的值,前面已将其赋值为'\0'了,但没有向前移位,所以要把移位的最后一位也设置为'\0',也就是说,你的理解只对了一半儿!
如果缺少最后一行的*p = '\0';会有一小段重复的子串.
第2个回答  2013-04-08
重新移动了字符串结束的位置而已,举例说明:
源字符串src为" flyhorse loves 小梅"
1,执行到*(p+end)='\0'的时候,src就是" flyhorse"了;
2,执行了最后的*p='\0',src就是"flyhorse"了,否则src就是"flyhorse ";
(p指针的重定位操作就在p++,p一旦移位,字符串结束位置也需要移位)本回答被提问者采纳
第3个回答  2013-04-08
'\0'表示字符串的终止。如果没有这个字符,就无法知道这个字符串是在什么地方结束的。追问

坑爹呢?这个地球人都知道。

追答

*(p+end) =’\0‘是给下一步(往前移单词)定一个终点罢了。*p = '\0'才是给字符串设终点。
另外提一句这段代码可读性不怎么好,初学者最好不要学习用这样的方式编程。下面这段程序更加规范美观些。
void word(char *p)
{
char * runner = p;

while(isspace(*runner))
runner++;
while(isspace(*runner)){
*p = *runner;
p++;
runner++;
}
*p = '\0';
}

第4个回答  2013-04-08
不是只读第一个单词么 ? 第1个单词和第2个单词之间不是用空格键隔开的么?所以只要读到空格键就行了,其他的都扔掉。。。。
char *p=&string;
if( *p !=‘ ’)
{
string str+=*p;
p++;
}
第5个回答  2013-04-08
每个字符串都是\0结束了 如果没有他就会出现乱码追问

无语,别捣乱好不好。。。。

追答

真没有捣乱啊 你去掉那句,然后直接运行一下看看不就知道结果了啊。

不懂可以原谅,说捣乱就不能原谅了

追问

如果没有他就会出现乱码。这句话很像捣乱的,不好意思!

相似回答