Вы были близки, но должны проверить с помощью логического или ||
, а не логического-и &&
(str[i]
просто не может быть равным двум разным вещам).
C ++03 Стандарт позволяет вам использовать ключевые слова and
и or
- и not
, xor
и т. Д. - вместо этих загадочных (для новых программистов) символов, но это не получило широкого распространения - возможно, потому что Microsoftв этом отношении компилятор по умолчанию не соответствует стандарту - по-видимому, чтобы не нарушать существующий клиентский код с переменными, функциями, типами и т. д. с этими именами.Таким образом, из-за переносимости и простоты многие библиотеки и учебники также избегают этих ключевых слов.
Другой подход, который может быть немного более кратким, - это использовать isalpha()
из <cctype>
, а затем проверить, что это не гласная.Более быстрые подходы, как правило, используют массивы от символьного значения до bool
, но остерегайтесь индексации вне массива из-за знаковых символьных значений или> = 128-битных не-ASCII-значений.Если есть также заглавные / строчные буквы - вы можете использовать tolower()
для своего персонажа перед тестированием (т.е. char c = tolower(str[i])); if (c == '...
).
Другие примечания: ваша функция должна:
- принимает свой аргумент
std::string
по ссылке const
(т. Е. const std::string& str
), чтобы избежать ненужного и трудоемкого копирования значения из вызывающего контекста в отдельную переменную, локальную для этой функции.Копирование не приносит никакого реального функционального вреда, но в этом нет необходимости. - делает
consonant
локальной переменной, а не параметром функции, так как любое введенное значение немедленно перекрывается 0, а результат возвращаетсяфункция, а не записанная в consonant
(что было бы невозможно, поскольку она передается по значению, а не по указателю / ссылке).