【C语言】西电xdoj上机题(246.单词统计)

目录

要求:

题目描述:

输入描述:

输出描述:

输入样例:

输出样例:

答案:

一点分析:

易错点:


要求:

单词统计

题目描述:

输入字符串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,写的可能不好,敬请见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值