单词识别(统计单词个数)

题目描述

输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来,要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。

输入描述:

输入有若干行,总计不超过1000个字符。

输出描述:

输出格式参见样例。

示例1

输入

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 <iostream>
#include <map>
#include <string>
using namespace std;

string convert(string s) {
	string res = "";
	for (int i = 0; i < s.length(); i++) {
		if (s[i] >= 'A' && s[i] <= 'Z') {
			s[i] = s[i]+32;
		}
		res += s[i];
	}
	return res;
}

bool isSplit(char ch) {
	if (ch == ',' || ch == '.' || ch == ' ') {
		return true;
	}
	return false;
}

void wordNumber(string s) {
	string temp = "";
	map<string, int> wordMap;
	for (int i = 0; i < s.length(); i++) {
		if (!isSplit(s[i])) {
			temp += s[i];
		} else {
			if (temp == "") {
				continue;
			}
			//若是一个分隔符,查找temp是否已经在map中,若在map中则将value值加1,否则添加一个key值

			//此处表示没有找到key为temp的map
			if (wordMap.find(temp) == wordMap.end()) {
				wordMap[temp] = 1;
			} else {
				int value = wordMap[temp];
				value++;
				wordMap[temp] = value;
			}
			temp = "";
		}
	}
	map<string, int>::iterator iter;
	for (iter = wordMap.begin(); iter != wordMap.end(); iter++) {
		cout << iter->first << ":" << iter->second << endl;
	}

}

int main(int n) {
	string s1;
	getline(cin, s1);
	string s = convert(s1);

	wordNumber(s);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32273417/article/details/87894398