jmu数据结构实验四任务

jmu数据结构实验四任务

选做:题目 4—统计单词的出现次数并输出

总时间限制: 2000ms    内存限制: 4096kB

描述

根据用户给定的一篇包含若干个单词的英文文章(文章只包含英文字母和空格、回车换行符,单词之间

以空格或者回车换行符分隔,单词最短一个字母,最长100个字母;最多包含100000个不同的单词),请

解析出所有不同的单词,并统计出每个单词出现的次数,然后按照单词出现的次数从小到大输出,如果出

现次数一样,则按照英文单词的词典顺序输出(忽略大小写区别,输出时全部变成小写字母)。

输入

英文文章。以“***”作为结束标志。

输出

单词按照出现次数从小到大的输出,一行一个单词。

样例输入

This is just a test
test test te
st
***

样例输出

a
is
just
st
te
this
test

题解

使用 map<string, int> dict 存放每个单词与其对应的存放次数。其中 key 值为单词,value 值为单词出现次数,每次输入使用transform函数(或自己编写转化小写的函数)将单词转化为小写,存入dict。

使用正向迭代器遍历dict,将所有单词及其出现个数存入结构体数组words,之后使用sort函数对结构体数组words进行按出现个数从小到大排序。

代码

#include<iostream>
#include<map>
#include<algorithm>
#include<cstring>
using namespace std;
struct word
{
	char word[105];
	int n;
}words[100005];//保存所有单词及其出现个数用于排序
bool cmp(struct word word1, struct word word2)
{
	return word1.n < word2.n;
}
map<string, int> dict;//保存所有单词出现个数
int main()
{
	string word;
	do
	{
		cin >> word;
		if (word != "***")
		{
			transform(word.cbegin(), word.cend(), word.begin(), ::tolower);//利用transfor函数将word转换为小写
			dict[word]++;//单词个数加一
		}
	} while (word != "***");
	auto it = dict.begin();//dict的正向迭代器,用于遍历dict
	int n = 0;//所有单词种数 
	while (it != dict.end())
	{
		memcpy(words[n].word, it->first.c_str(), 105);//将word转换为c风格字符串复制给words[n].word
		words[n].n = it->second;//将该单词出现个数赋值给words[n].n
		it++;//迭代器移动
		n++; //单词种数
	}
	sort(words, words + n, cmp);//对结构体word按单词出现个数从小到大排序
	for (int i = 0; i < n; i++)
	{
		cout << words[i].word << endl;
	}
	return 0;
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值