2014-04-08 3 views
2

Направления для моего назначения является следующей:Строки со сменными буквами

Возвращает число раза, что строка «надежда» появляется где-нибудь в данной строке, за исключением того, мы принимаем любую букву для «р ', поэтому подсчет «hode» и «hooe».

Я изо всех сил пытаюсь понять, как сделать третью букву равной чему-либо, и все еще есть программа, определяющая, что она правильная.

Мой код до сих пор, очевидно, ошибочен, но, несмотря на это, включите его.

Одна большая проблема заключается в том, что я не могу сказать массиву, чтобы проверить, соответствует ли она строке.

int wordsFunction(string words) 
{ 
int num = 0; 

for(int i = 0; i < words.length(); i++) 
{ 
    if(words[i] == "Hope" || words[i] == "hope") 
    { 
     num++; 
    } 
} 
return num; 
} 

main() 
{ 
string words; 
cout << "Enter a string: "; 
getline(cin, words); 
cout << wordsFunction(words); 
+2

Если 'words' является' string', 'words [i]' является 'char', и вы не можете сравнивать его с массивом символов как' "hope" , Найдите подстроку «ho», а затем проверьте, является ли четвертое письмо «e». – ChronoTrigger

+1

Ваш код не будет работать. Подсказка: вы сравниваете переменные с несовместимыми (как грубое приближение: разные) типы. В программировании это похоже на сравнение яблок с бананами. – collapsar

ответ

5

Мой код до сих пор совершенно очевидно, неправильно

Это верно. Я бы не стал объяснять, почему ваш код неправильный, и сразу перейдите к описанию исправления.

Ваш main читает строку, которая позволяет использовать пробелы, что хорошо: часть ввода-вывода вашего кода не требуется изменять.

Теперь заметит, что для обнаружения слова "ho*e" с * обозначая любой одиночный символ, на позиции i слова w, вы должны проверить, что w[i] является 'h', w[i+1] является 'o', w[i+3] является 'e', и что индекс i+3 действителен. Это становится простой проверкой:

if (i+3 < w.size() && w[i] == 'h' && w[i+1] == 'o' && w[i+3] == 'e') { 
    count++; 
} 
+0

Nice.now было бы также лучше сделать этот случай программы (верхний и нижний). –

+0

@MudassirHussain. Код, опубликованный OP, предполагает, что первая буква '' ho * e "' может быть в верхнем регистре, но текст вопроса не поддерживает это предположение. Конечно, простым решением для этого является преобразование 'w' в нижний регистр перед поиском. – dasblinkenlight

+0

Вау, спасибо, что было интересно. Отличное объяснение. – Christoph

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