2015-03-21 8 views
-1

Я пытаюсь написать свою собственную функцию, которая получает 2 строки и говорит, что первая содержит вторую в качестве слова (это означает, что слово окружено символом "" или " , ") Когда я тестирую его на строки« squawk, визг »и« squawk », это ok, он переходит во второй цикл цикла (тот, что с j), и выводит 1, но для« визга »он не зайдите в петлю j. Вот код, который я до сих пор:Функция не входит в цикл

bool containsMeaning(string bigMeaning, string smallMeaning) 

{ 

unsigned int smallCounter = 0; 
unsigned int matchBeginning = 0; 
unsigned int matchEnd = 0; 
for (unsigned int i = 0; i < bigMeaning.size() - smallMeaning.size() + 1; i++) 
{ 
    cout << "i = " << i << endl; 
    smallCounter = 0; 
    if (bigMeaning[i] == smallMeaning[0]) 
    { 
     matchBeginning = 0; 
     cout << "I'm inside the if " << i << endl; 
     for (unsigned int j = i; j < smallMeaning.size(); j++) 
     { 
      cout << "big char " << bigMeaning[j] << " small char " << smallMeaning[smallCounter] << endl; 
      if (bigMeaning[j] != smallMeaning[smallCounter]) 
      { 
       cout << "I want to break free" << j << endl; 
       break; 
      } 
      else 
      { 
       matchEnd = j; 
       smallCounter++; 
       cout << "j = " << j << " smallcoutner = " << smallCounter << endl; 
      } 
     } 
     if (smallCounter == smallMeaning.size() && 
      (matchBeginning == 0 || bigMeaning[matchBeginning - 1] == ' ' || bigMeaning[matchBeginning - 1] == ',') 
     && (bigMeaning[matchEnd + 1] == '\0' || bigMeaning[matchEnd + 1] == ' ' || bigMeaning[matchEnd + 1] == ',')) 
      return true; 
    } 
} 
return false; 

}

+1

Мысль об использовании отладчика и переходе через код? –

+1

Какие аномалии вы наблюдали при прохождении кода по строкам с помощью отладчика? –

+0

Я отметил его на линии 'cout << big char', когда я печатаю визг, он делает это в первом слове squawk для 3 символов, останавливается и никогда не переходит во второе слово – Robert

ответ

0

Проблема заключается в условиях во втором for цикле. Существует логическая ошибка в том, что вы там делаете. Вы устанавливаете j = i с целью иметь счетчик, который будет перебирать по обеим строкам, сравнивая их по характеру. Тем не менее, i в первом цикле for итерации над большей строкой, и нет никаких оснований для того, чтобы он был меньше размера меньшей строки, что вы принимаете во втором цикле в команде j < smallMeaning.size().

Вместо этого ваша петля for должна for (int j = i; j < i + smallMeaning.size(); j++).

+0

Omg, большое вам спасибо, я так смущен :( – Robert

Смежные вопросы