【题解】【AcWing】3581. 单词识别

188 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

3581. 单词识别

原题传送:AcWing 3581. 单词识别

输入一行英文句子,统计句子中出现的各个单词(不区分大小写)及其出现次数。

要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。

输入格式

共一行,包含一个长度不超过 10001000 的字符串。

字符串中只包含大小写字母,空格,英文句号和逗号。

输出格式

按字典顺序,输出每个单词及其出现次数。

单词在输出时,应将字母全部转化为小写。

每个单词的输出占一行。

具体格式为:

word:times

数据范围

输入字符串长度不超过 10001000 。 至少存在一个有效单词,单词一定完全由字母构成。

输入样例:

A blockhouse is a small castle that has four openings through which to shoot.

输出样例:

a:2
blockhouse:1
castle:1
four:1
has:1
is:1
openings:1
shoot:1
small:1
that:1
through:1
to:1
which:1

思路:

遍历字符串,将非空格、句号和逗号的字符的子串存入哈希表。

题解:

#include <bits/stdc++.h>

using namespace std;

string line, s;
map<string, int> mp;

int main()
{
	getline(cin, line);
	
	for(int i = 0; i < line.length(); i++)
	{
		int j = i;
		string tmp = "";
		
		while(line[j] != ' ' && line[j] != ',' && line[j] != '.' && j < line.length()) 
		{
			tmp += tolower(line[j]);
			j++;
		}
		
		if(tmp.size()) mp[tmp]++;
		
		i = j;
	}
	
	for(auto& [k, v] : mp)
		cout << k << ":" << v << endl;
	
	return 0;
}