【发布时间】:2019-12-02 05:27:39
【问题描述】:
我正在尝试编写一个程序来比较两个字符串(字符串和子字符串)和每次在字符串中找到子字符串时的煽动。但是,使用标准:
if(str.find(substr) != string::npos)
{
count++;
}
我遇到的问题是,如果子字符串在字符串中出现多次,它只会增加一次。因此,如果字符串是“test test test”并且子字符串是“test”,则计数最终只会是 1 而不是 4。
解决此问题的最佳方法是什么?
*上下文注释:
1) 有一次,我正在逐个字符地检查字符串以查看它们是否匹配,但是当我遇到一些单词中包含较小单词的问题时,我不得不放弃它。
示例:“is”会在“this”等单词中出现
2) 较大的程序接受两个向量。第一个向量有一个字符串,每个元素是用户输入的句子(在上面的示例中作用于主字符串)。第二个向量将所有句子中的每个单词都输入到第一个向量中(在上面的示例中充当子字符串)。不确定那一点是否重要,但我想我会把它扔在那里
例子:
vector<string> str {this is line one, this is line two, this is line three};
vector<string> substr {is, line, one, this, three, two};
3) 我在想是否有某种与 !=string::npos 相反的方法可行,但不确定是否存在。
【问题讨论】:
-
@JaMiT 这些答案使用了
string::find(),但不区分整个子字符串和较大单词中的小子字符串,这是 OP 需要的 -
@JaMit 好吧,我确定答案就在其中……但是我在尝试遵循他们的代码时迷失了方向。有没有更笨的版本?
-
@RemyLebeau 确实如此,但我会添加“也”这个词,就像“OP also 需要的”一样。尝试同时回答两个问题(如何计算多次出现以及如何忽略正确的单词子串)可能会很棘手。
-
@DamnGoodCake 你看过接受的答案了吗?这相当短。