我正在编写一个C ++程序来计算文本文件中出现的单词的频率。我使用isalpha
函数来分隔单词,但isalpha
不区分具有不同标点符号的相同字符串。
例如:“我拥有一家公司。在我的公司,有200名员工。我爱我的公司。” 在上面的句子中,它将公司的数量计为3 如何区分计数如下:
company 1
company, 1
company. 1
进行计数的循环:
while(!isalpha(c) && !in.eof())
{
c = in.get();
}
while(isalpha(c))
{
out.push_back(tolower(c));
c = in.get();
}
其中'out'是一个字符串,'in'是一个istream值,c是一个char。
[编辑]获得解决方案
while(!isalpha(c) && !ispunct(c) !in.eof())
{
c = in.get();
}
while(isalpha(c) || ispunct(c))
{
out.push_back(tolower(c));
c = in.get();
}
答案 0 :(得分:2)
我认为你的方式更好(我希望公司的数量为3)。
但是如果你想分隔单词和标点符号很重要,那么使用isspace()作为分隔符。
注意:标准流>>运营商已经为您做了这件事。
std::string word;
in >> word;
std::transform(word.begin(), word.end(), word.begin(), ::tolower);