本文已参与「新人创作礼」活动,一起开启掘金创作之路。
3581. 单词识别
原题传送:AcWing 3581. 单词识别
输入一行英文句子,统计句子中出现的各个单词(不区分大小写)及其出现次数。
要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。
输入格式
共一行,包含一个长度不超过 的字符串。
字符串中只包含大小写字母,空格,英文句号和逗号。
输出格式
按字典顺序,输出每个单词及其出现次数。
单词在输出时,应将字母全部转化为小写。
每个单词的输出占一行。
具体格式为:
word:times
数据范围
输入字符串长度不超过 。 至少存在一个有效单词,单词一定完全由字母构成。
输入样例:
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;
}