大概思路:
一个map<string,int>存储输入的字符内容以及输入的次数,对次数进行判断,输出少于指定次数的字符串:
#include<iostream> #include<map> #include<string> using namespace std; int main() { int n; int s=0; map<string, int> mp; cin >> n; string str=""; map<string, int>::iterator it; cin.ignore(); //特别注意这里,使用for循环+getline实现多行输入字符串,要加这句来干掉滞留在输入流中的换行符 for (int i = 0; i<n; i++) { getline(cin, str); it = mp.find(str); if (it == mp.end()) //判断字符串石否之前出现过 { mp[str] = 1; //第一次出现就把次数设为1 s += 1; } else it->second+=1; //不是第一次出现就把次数加 1 str = ""; } it = mp.begin(); cout << "len: " << s << endl; cout << "mp.size: " << mp.size()<<endl; while (it != mp.end()) { if((it->second)<(s / 3.0)) { cout << it->first << " " << it->second << endl; } it++; } }
测试:第一行输入待输入字符串的个数n,后面n行输入每次输入的字符串,输出次数少于n/3的字符串及其次数