// a is some string;
b=a.length;
for(int i=1; i<b; i++)
{
if(a[i-1]==a[i]==a[i+1])
{
cout <<a[i]<<endl;
//more to add
}
}
想要检查是否出现相同的3个或更多字母 - 这里有什么问题?
答案 0 :(得分:1)
您的具体问题是:
a[i-1]==a[i]==a[i+1]
评估为
(a[i-1] == a[i]) == a[i+1]
是
true == a[i+1]
false == a[i+1]
这两者都不是你想要的。此外,当i == a.size()
时,a[i+1]
将读取字符串的结尾,这是未定义的行为。
此外,您的标题声称您要检查字母是否出现超过2次,但您的代码即使已修复,也会检查它是否连续出现3次。如果您确实要检查3次,请使用std::count
:
for (int i = 0; i < a.size(); ++i) {
if (std::count(a.begin(), a.end(), a[i]) >= 3) {
// success!
}
}
答案 1 :(得分:0)
检查字符串中N个连续字符的另一个实现(线性时间复杂度),
const std::size_t N = 3;
std::string text { "this is a string" };
std::size_t index = 0;
std::size_t num_same_char = 1;
while (index + N - num_same_char < text.size()) {
if (num_same_char == N) {
// found at index
break;
}
if (text[index] == text[index + num_same_char]) {
num_same_char++;
}
else {
num_same_char = 1;
index += num_same_char;
}
}
答案 2 :(得分:0)
// a is some string;
b=a.length;
for(int i=1; i<b-1; i++) **//Iterate till b-1 not b**
{
if(a[i-1]==a[i] && a[i]==a[i+1])
{
cout <<a[i]<<endl;
//more to add
}
}
希望这有帮助。