检查相同的字母是否连续3次出现在字符串中

时间:2015-08-02 23:50:41

标签: c++

// 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个或更多字母 - 这里有什么问题?

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
        }
}

希望这有帮助。