比较给定字符串上的元素

时间:2014-01-23 02:47:37

标签: c++

如果至少有七个相同的字符,我的目标是在控制台上打印“YES”字样。这是我的代码,我不明白为什么它运行此输入:“1000000001”但它不适用于“00000001”或“100000001”。求助。

#include <iostream>
#include <cstdio>

using namespace std;

string cad1;
int cont=1;

int main(){
    cin >> cad1;

    for(int i=1;i<cad1.length();i++){

            if(cad1[i] == cad1[i-1]){
                       cont++;           
            }else{
                  cont=1;
            }

    }

    if(cont >= 7){
          cout << "YES" << endl;          
    }else{

          cout << "NO" << endl;
    }

    cin.get();    

}

3 个答案:

答案 0 :(得分:3)

您正在测试它是错误的,您将该值与前一个值进行比较。所以这个字符串:

1    0    0    0    0    0    0    0    1

评估:(F =假,T =真)

1    0    0    0    0    0    0    0    1
  F    T    T    T     T    T    T    F

每个TF都是测试上述两个字符的结果。

计算T,有6个。你需要重新考虑你的测试。

这样的一些代码可能有所帮助:

char current = 0;
int length = 1;
bool foundSeven = false;
for(int i = 0; i < cad1.length(); i++) {
    if(current == cad1[i]) {
        length++;
    } else {
        length = 1;
    }
    current = cad1[i];
    if(length == 7) {
        foundSeven = true;
        break;
    }
}

答案 1 :(得分:1)

您的代码对我来说不适用于“1000000001”。如果你删除最后一个它是有效的。 当计数器达到7时,放下休息,它会起作用。

答案 2 :(得分:0)

虽然它已经回答了,但这是使用strtok的另一种方式(在处理字符串操作时进行操作)

#include <stdio.h>
#include <string.h>

int main ()
{
    char str[] ="1000000001";
    char * pch;
    int count =0;

    for(pch = strtok(str, "1"); pch!=NULL; pch = strtok( NULL, "1"))
    {
            //printf("\n%s\n",pch);
            count+=strlen(pch);
    }
    printf("\ntimes -%d", count);

return 0;
}