原题题目
二、解题思路
思路很简单,按单词为单位遍历字符串,找到相同单词并替换。可偏偏在C语言对字符串的操作并不是太容易(因为C语言没有字符串类型,只有字符数组)所以最后还是找到了 Belous同学的一篇题解,发现可以使用 sscanf 函数并配合指针来实现挨个读取单词检查后输出。
看来 sscanf 以后还是要注意一点的,毕竟人家是专门从字符数组中读入数据(而不是键盘),另外,还得再学学指针的知识,快忘完了都。。。
三、代码实现
#include<stdio.h>
#include<string.h>
int main()
{
char str[120],str1[120],str2[120],temp[120],*str_p=str;
scanf("%[^\n]%s%s",str,str1,str2);
// %[^\n]表示读取一个字符集,以\n作为结束标志,\n不读入字符串。
while(1)
{
sscanf(str_p,"%s",&temp);
if(strcmp(temp,str1) == 0) //if (!strcmp(temp, str1))
printf("%s",str2);
else
printf("%s",temp);
str_p += strlen(temp) + 1;
if(str_p > str+strlen(str))
break;
printf(" "); //putchar(" ");
}
return 0;
}
四、题目总结
从字符数组中读入数据可以用 sscanf ,可得记好了,说不定在哪个题目中就会有奇用,另外:
关于scanf("%[^\n]%s%s",str,str1,str2);
,^
表示"非",[^\n]
表示读入换行字符就结束读入。这个是scanf的正则用法,我们都知道scanf不能接收空格符,一接受到空格就结束读入,所以不能像gets()等函数一样接受一行字符串,但是使用%[^\n]
就可以读取一行,直到碰到’\n’才结束读入。(来自小白tree)