2014-01-23 4 views
1

моя цель - напечатать на консоли слово «ДА», если есть как минимум семь одинаковых символов вместе. Вот мой код, который я не понимаю, поэтому он работает для этого ввода: «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();  

} 
+1

Это не дает должный результат для любого из примеров входов. Вы удаляете любой предыдущий счет, как только найдете другой символ: 'else { cont = 1; } ' – Nabla

ответ

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 

Каждый T или F является результатом тестирования двух вышеназванных персонажей.

Подсчитайте 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; 
    } 
} 
+0

да, но почему он работает для« 1000000001 »тогда? – user3152299

+2

@ user3152299, подсчитайте количество цифр, и вы узнаете. –

+0

, но потом должно произойти то, что говорит Набла. последний «1» в «1000000001» должен сбросить счетчик. я не понимаю, почему для 8 0 здесь код работает. – user3152299

1

Ваш код не работает для меня с «1000000001». Если вы удалите последний 1, он будет работать. Положите разрыв, когда счетчик достигнет 7, и он будет работать.

0

Хотя его уже ответил, вот еще один способ использования strtok (пригождается, ЗАНИМАЮЩИЙСЯ STRINGS МАНИПУЛЯЦИЙ)

#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; 
} 
Смежные вопросы