C++找到字符串中非重叠子字符串的位置细节

我试图找出如何找到字符串中不重叠的子字符串的数量,但只找到那些距离相同的子字符串。我设法得到了非重叠子字符串的数量,但这只是需求的子集

例如:
我有一根绳子;aaaaaaaaaaaabaaaba“;我想计算不重叠的子字符串的数量;aa“;但只有距离乘以2的那些

标准的非重叠代码返回8,这是正确的(aa aa b aa ba-通过空格区分结果)。它在位置0,2,4,6,8,11,13,15处找到子字符串

当我试图实现距离要求时,我遇到了一个问题。
所需计数应为7,省略位置11处的“a”,并在位置12处继续(aa aa aa aa ab a)。。。再次通过空格区分结果,位置11处的“a”应与位置10处的“b”形成子字符串“ba”

我尝试用模来识别正确的位置,只计算以模结果0开始的位置的子串,但是通过执行我的代码,处理只在第五次出现时停止,在中间的“B”之前,而忽略下一个。

错误:aa aa aa aa aa a
好:aa aa aa aa aa aa ab a

同样,它也应适用于其他尺寸,例如“finding”;aaa",因此,结果将是4“;aaa aaa aaa aaa aaa AAAB a”的英文缩写;而不是5“;aaa aaa aaa aaa ba”的英文缩写

string str="“aaaaaaaaaaaabaaaaaba”;;
字符串sub="“aa”;;
整数计数=0;
对于(size\u t offset=str.find(sub);offset!=std::string::npos;
偏移量=str.find(子,偏移量+子长度())
{
int pos=偏移量%子长度();
如果(位置==0)
{
++计数;
cout<count<count<count<count<count<count<count<count<count<count<count<count<endl;
}
}
库特&lt&lt&引用;伯爵:“我的名字叫什么?”&lt&书信电报;计数&lt&书信电报;endl;
返回0;

您的循环做了一件错误的事情:它试图从上次找到的偏移量+2(长度aa)开始查找子字符串

在奇数位置找到第一个aa后,所有后续尝试也将找到奇数位置

这项工作:

for(size\u t offset=str.find(sub);offset!=std::string::npos;
偏移量=str.find(子,偏移量+1))

发表评论