最简单的方法是创建一个字符串到整数的映射。
std::map<std::string, int>
然后增加包含的 int,或者如果它不存在则添加到地图中。
http://www.cplusplus.com/reference/map/map/
如果您使用的是 c++11(我认为)或更高版本,您甚至可以使用 unordered_map,它不是使用排序来访问元素,而是使用散列。如果性能很重要,这是您可以研究的优化。
这里有一些示例代码可以帮助您入门
#include <iostream>
#include <map>
#include <string>
using namespace std;
void incrementString(map<string, int> &theMap, string &theString) {
if(theMap.count(theString)) {
theMap[theString]++;
} else {
theMap[theString] = 1;//This fixes the issue the other poster mentioned, though on most systems is not necessary, and this function would not need an if/else block at all.
}
}
void printMap(map<string, int> &theMap) {
map<string, int>::iterator it = theMap.begin();
do {
cout << it->first << ": " << it->second << endl;
} while(++it != theMap.end());
}
int main() {
map<string, int> stringMap;
string hi = "hi";//Assigning "hi" to a string, like like cin>>string would.
string the = "the";
incrementString(stringMap, hi);//Adding one occurance of hi to the map
incrementString(stringMap, the);//Adding one occurance of the to the map
incrementString(stringMap, hi);//Adding another occurance of hi to the map
printMap(stringMap); //Printing the map so far
}
int main_alt() {
map<string, int> stringMap;
string someString;
while(cin>>someString) {//reads string from std::cin, I recommend using this instead of getline()
incrementString(stringMap, someString);
}
printMap(stringMap);
}
因此,预期的输出是:
hi: 2
the: 1
此外,如果你启用“main_alt()”,你可以像这样调用你的程序,看看 while(cin>>string) 行是如何工作的。
./program < someFile.txt