区分C ++中具有不同标点符号的相同字符串

时间:2011-11-08 15:56:01

标签: c++

我正在编写一个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();
}

1 个答案:

答案 0 :(得分:2)

我认为你的方式更好(我希望公司的数量为3)。

但是如果你想分隔单词和标点符号很重要,那么使用isspace()作为分隔符。

注意:标准流>>运营商已经为您做了这件事。

std::string  word;
in >> word;
std::transform(word.begin(), word.end(), word.begin(), ::tolower);