这题应该考的是字符串整体输出时的特点
反正puts()和printf(%s)也很耿直,就从给定的地址开始读取字符,读到’\0’就结束,至于给定的地址前是啥,’\0’后又是啥,他们一点也不关心
比如一个char set[]={‘a’,’\0’,‘b’,‘c’,’\0’};
你从头开始puts就出来一个a,你从b开始puts就出来bc
所以弄两个指针,一个checkPtr在碰到空格时就把它改成’\0’,同时通知printPtr打印这一句,每次碰到’\0’两个就一起越过去,printPtr总停留在某个单词的开始
遍历条件是*checkPtr不是\0,所以最后一次没有机会给printPtr打印,还要单独调用一次
#include <stdio.h>
void printWords(char *);
int main(int argc, char const *argv[])
{
char str[10001],*strPtr=&str;
gets(str);
printWords(strPtr);
return 0;
}
void printWords(char *checkPtr)
{
char *printPtr=checkPtr;
while(*checkPtr!='\0')
{
if(*checkPtr==' ')
{
*checkPtr='\0';
puts(printPtr);
checkPtr++;
printPtr=checkPtr;
}
else checkPtr++;
}
puts(printPtr);
}
题目描述
已知一个总长度不超过10000的字符串,字符串中只包含大写字母“A—Z”、小写字母“a—z”和空格‘ ’。空格用于分割单词,空格的个数不超过1000个。你的任务是将字符串中用空格分隔的单词打印出来。
你要按照如下要求完成任务:
1.利用指针数组指向每个单词的开始位置。
2.把字符串中单词结束后的空格改为“\0”,然后使用指针数组将每个单词打印出来。
3.不可直接输出或使用二维数组输出单词。
输入与输出要求:输入一个字符串,满足题目描述,占一行。输出这个字符串中的单词,每个单词占一行。
程序运行效果:
Sample 1:
You are great↙
You↙
are↙
great↙
Sample 2:
itisalongword↙
itisalongword↙