在面试前,我遇到了这样一个问题:
给定一个由单个空格分隔的单词组成的字符串,按单词在字符串中出现的次数降序打印单词。
例如,输入字符串“a b b”将生成以下输出:
b : 2
a : 1
首先,我想说输入字符串是由单字母单词还是多字母单词组成的还不是很清楚。如果是前者,那就简单了。
这是我的想法:
int c[26] = {0};
char *pIn = strIn;
while (*pIn != 0 && *pIn != ' ')
{
++c[*pIn];
++pIn;
}
/* how to sort the array c[26] and remember the original index? */
我可以获得输入字符串中每个单字母单词出现频率的统计数据,并且可以对其进行排序(使用 QuickSort 或其他方法)。但是计数数组排序后,如何获取与计数相关的单字母单词,以便稍后将它们成对打印出来?
如果输入字符串由多个字母组成,我打算使用 map<const char *, int>
跟踪频率。但同样,如何对 map 的键值对进行排序?
问题是C或C++,欢迎任何建议。
谢谢!
最佳答案
我会使用 std::map<std::string, int>
存储单词及其计数。然后我会用这个来获取单词:
while(std::cin >> word) {
// increment map's count for that word
}
最后,你只需要弄清楚如何按频率顺序打印它们,我会把它留给你作为练习。
关于c++ - 词频统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8681245/