目录
要求:
单词统计
题目描述:
输入字符串string[N](N≤100),各个单词以空格隔开,单词长度小于等于8,输入单词word[M](M≤8),在string中查找出相同的单词并统计该单词出现的次数信息,单词不区分大小写,输出单词和出现次数的信息,数据之间空一格空格。 主函数输入字符串和待统计单词,编写函数count()实现统计和信息输出
输入描述:
输入一行字符以空格隔开各个单词,输入要统计的单词
输出描述:
输出单词及其出现的次数信息,数据之间空一格。
输入样例:
To be or not to be is a question to
输出样例:
to 2
答案:
#include <stdio.h>
#include <string.h>
int main() {
char p[101] = {0}, yuan[9] = {0};
gets(p);
gets(yuan);
int i, j, n = strlen(yuan), sum = 0, tuichu = 0;
for (i = 0; p[i] != 0;) {
for (j = i;; j++)
if (p[j] == ' ') {
if (strnicmp(&p[i], yuan, n > j - i ? n : j - i) == 0)//易错点
sum++;
break;
} else if (p[j] == 0) {
if (strnicmp(&p[i], yuan, n > j - i ? n : j - i) == 0)
sum++;
tuichu = 1;
break;
}
i = j + 1;
if (tuichu == 1)
break;
}
printf("%s %d", yuan, sum);
return 0;
}
一点分析:
本程序采用比较常规的做法,即检测每一个单词然后与所给单词比较即可。
检测单词只需要检测空格和终止符号就好了,这里可以采用数组或者指针做(毕竟本质差不多的),本程序采用了前者(有兴趣的同学可以自行采用一下后者)。具体的做法就是定义一个初始点和结束点(即p[i]和p[j]),刚开始的初始点就是p[0],然后向后检测,空格或终止符号出现的地方就是结束点,比较一下,然后初始点再从结束点的下一个位置开始,如此回环往复即可。
易错点:
本程序使用了strnicmp函数(包含在<string.h>头文件里)比较两个单词,这个函数即能规定比较的长度(n)又可以忽略大小写(i),在这里使用非常合适。
比较的时候,规定的长度不能只用n,否则会出现以下情况(经亲身测试,测试数据就有一个是酱紫的,导致我一直无法满分🥲):
to n=2,tonight
酱紫的话后面的单词也能算一个,但是这明显不对,因此使用比较单词长度和n大小并选取较大值的方法,这里就可以避免上述问题的出现。
写成函数只需要将中间的部分拿出来即可,本人较懒,所以就靠大家了。(但是这样子提交也是满分)
由于本人刚开始学c,写的可能不好,敬请见谅。