【发布时间】:2016-03-07 13:46:00
【问题描述】:
我编写了这段代码来计算字符串中每个字符的出现次数,但它不计算空格或任何扩展 ASCII 字符...知道吗?
#include <iostream>
#include <map>
#include <string>
int main()
{
std::string input = "slowly";
std::map<char, int> occurrences;
for (std::string::iterator character = input.begin(); character != input.end(); character++)
{
occurrences[*character] += 1;
}
for (std::map<char, int>::iterator entry = occurrences.begin(); entry != occurrences.end(); entry++)
{
std::cout << entry->first << '=' << entry->second << std::endl;
}
}
如果有任何更快的算法来处理大量字符以获得相同的结果,我将不胜感激??
【问题讨论】:
-
嗯,你可以使用一个计数数组,带有
127条目,然后直接索引到它。std::unordered_map通常是比std::map更好的“默认”关联容器。 (我也不是std::endl的粉丝。) -
它会计算空格和特殊字符。
-
首先,如果您有非常大的字符串,您可以并行执行。其次,我建议使用
std::array<std::size_t, 256u>作为occurences的类型,并在使用前将所有这些值初始化为0。
标签: c++