【每日一题】统计字符串中每个单词出现的次数

题目描述: 以字符串的形式提供给你一段英文文章,请编写一个程序。该程序将统计指定字符串中每个单词出现的次数,并输出出现次数最多的单词及其出现次数。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

//实现字符串中每个单词出现的次数统计
void CountWords(char str[])
{
	char S[20][10];//用于存储每个单词
	int Count[20];//用于统计每个单词出现的次数
	int i = 0, j = 0, k = 0;
	int Num;//表示单词的个数
	int flag[20];//用于标志单词是否被统计过,统计过为0,未统计为1

	memset(flag, 1, sizeof(flag));

	while (str[k] != '\0')//将每个单词放入S的二维数组中
	{
		//将单词与单词前的空格设为一个基本单位,这个循环用于删除基本单位前的空格或者句号
		while (str[k] == ' ' || str[k] == '.')
		{
			k++;
		}
		//将字符串保存到二维数组中,为了能很好的使用puts函数.
		while ((str[k] <= 'z'&&str[k] >= 'a') || (str[k] <= 'Z'&&str[k] >= 'z'))
		{
			S[i][j] = str[k];
			j++;//指标向前移动一位
			k++;//str指标向前移动一位
		}
		S[i][j] = '\0';//为了能很好的使用puts函数,我们需要在每个单词的末尾加入一个'\0';
		i++;//S切换到下一行,当整个循环结束时i多计算了一位。
		j = 0;//j置为0
	}
	Num = i - 1;

	/*下面的循环用于统计每个单词出现的次数*/
	for (i = 0; i <= Num; i++)
	{
		Count[i] = 1;//将每个count初始值设为1,因为每个单词都算一次
	}
	for (i = 0; i<Num; i++)
	{
		if (flag[i] == 0)//这里表示如果前面单词已经被统计过了,我们就不再统计
		{
			goto SKIP;
		}
		for (j = i + 1; j <= Num; j++)//进行数量统计,统计过的单词,我们用flag标志
		{
			if (strcmp(S[i], S[j]) == 0)
			{
				Count[i]++;
				flag[j] = 0;
			}
		}
	SKIP:;
	}

	//标记单词出现次数最高的
	int max = Count[0];
	int bit;
	int c;
	int x;

	for (x = 1; x<=Num; x++)
	{
		if (Count[x]>max)
		{
			c = Count[x];
			bit = x;
		}
	}
	//输出
	puts(S[bit]);
	cout << "number is : " << c <<endl;
}
int main()
{
	char str[100];
	cout << "Please input the string:";
	gets(str);
	CountWords(str);
	return 0;
}



//测试用例:
输入:
what a day day day.
输出:
day
number is : 3
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值