Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
区分C+中标点符号不同的相同字符串+; 我正在编写一个C++程序来计算文本文件中出现的单词的频率。我正在使用isalpha函数来分隔单词,但是isalpha不会区分具有不同标点的相同字符串_C++ - Fatal编程技术网

区分C+中标点符号不同的相同字符串+; 我正在编写一个C++程序来计算文本文件中出现的单词的频率。我正在使用isalpha函数来分隔单词,但是isalpha不会区分具有不同标点的相同字符串

区分C+中标点符号不同的相同字符串+; 我正在编写一个C++程序来计算文本文件中出现的单词的频率。我正在使用isalpha函数来分隔单词,但是isalpha不会区分具有不同标点的相同字符串,c++,C++,例如:“我拥有一家公司。在我的公司里,有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”是字符串

例如:“我拥有一家公司。在我的公司里,有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();
}

我认为你们的方式更好(我希望公司能数到3)

但是,如果您想将单词和有意义的标点分开,那么可以使用isspace()作为分隔符

注意:标准流>>操作符已经为您执行此操作

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

重新检查并重新思考
的逻辑,而
条件。您好,@user--这是一个家庭作业问题吗?我们有时会帮助做作业,但这对我们来说是好的,这是我们的案例。不,Rob,这只是我在探索C++,我想让人头脑风暴。无论如何,谢谢你,找到了解决方案,并为其他人发布了。因此,你想让我使用isspace而不是两个while循环中的isalpha吗?@user1035927:Yep(并反转not条件)。好的,得到了解决方案,我使用了Ispunt,而使用了or条件:谢谢你的帮助。。。。