【发布时间】:2020-02-21 18:49:43
【问题描述】:
首先,我知道这个问题有很多重复,但我已经尝试过并且无法解决我的问题。
我有以下字符串
string s = "asdfqasdfp";
我需要遍历字符串并找出哪个子字符串出现多次。所以在这种情况下它的
asdf
我编写了以下代码,但我不知道为什么它不起作用。我从完整的字符串开始,一次向下一个。我应该得到 2 的出现值。
int t = s.length();
for (int i = 0; i < s.length(); i++) {
string str = s.substr(0, t);
int occurence = 0;
size_t start = 0;
while ((start = s.find(str, start)) != string::npos) {
++occurence;
start += str.length();
}
if (occurence > 1) {
cout << occurence;
}
else {
--t;
}
}
编辑:我只想要字符串包含的最大子字符串,在这种情况下
“asdf”
【问题讨论】:
-
对不起,如果它是幼稚的,我对 cpp 很陌生并且一直在努力。
-
已编辑问题以阐明我想要什么
-
@rex 您显然只考虑从输入字符串开头的子字符串 (
s.substr(0, t);)。这是你想要的吗?如果输入字符串是"xasdfqasdfp"怎么办? -
@Dabiel 如果 s.substr(i, t) 不起作用,我可以将其更改为什么?
-
@Daniel 我做了 Rup 为我做的事情,它为我的问题提供了快速解决方案。但是,我现在将尝试按照您的方式进行操作,以便更好地理解。感谢您的帮助。