[英]Is there alternative str.find in c++?
我有一个队列fifo类型(先进先出),里面有字符串。 每个字符串都是句子。 我需要在其中找到一个单词,并在控制台上显示它。 问题是,当我使用str.find(“ word”)时,它可以显示带有“ words”的句子。
添加空格和一些符号,例如“。,?!” = str.find(“ word”)等,但这不是解决方案
if (head != nullptr)
do {
if (head->zdanie_kol.find("promotion") != string::npos ||
head->zdanie_kol.find("discount") != string::npos ||
head->zdanie_kol.find("sale") != string::npos ||
head->zdanie_kol.find("offer") != string::npos)
cout << head->zdanie_kol << endl;
} while (head != nullptr);
例如,我有两个句子,一个是正确的,另一个是不正确的。
正确:
我们为您提供了一个特别的电子邮件数据库,可以联系卖家和购物者的eBay成员。
不正确:
不要错过机会,注册并找到我们为您准备的超级促销!
我可以想到的三个最简单的解决方案是:
'\\0'
,则找到了匹配项。 确保也事先检查过字符,以免在寻找word
时与sword
不符。 还要确保您没有读取超出字符串存储范围的内容。 strtok()
完成此操作。 regex_match()
)。 取决于您选择的引擎,语法可能会有所不同,但是大多数语法都带有类似"\\\\bsale\\\\b"
,它们会在字边界上匹配(有关更多信息,请参见此处 )。 这是使用std::unordered_set
和std::istringstream
的解决方案:
#include <unordered_set>
#include <string>
#include <sstream>
//...
std::unordered_set<std::string> filter_word = {"promotion", "discount", "sale", "offer"};
//...
std::istringstream strm(head->zdanie_kol);
std::string word;
while (strm >> word)
{
if (filter_word(word).count())
{
std::cout << head->zdanie_kol << std::endl;
break;
}
}
//...
如果要检查的单词更多而不是4个单词,则此解决方案似乎更易于使用,因为您要做的就是将这些单词添加到unordered_set
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.