Я пытаюсь подсчитать общее количество гласных в строке. Я использую strlen для получения общей длины строки, но затем, когда я пытаюсь подсчитать строку по каждой букве, она говорит, что C++ запрещает сравнение. Поэтому я предполагаю, что что-то не так в моей инструкции if.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sentence[] = "";
int count;
int total;
int length;
int lengthcount;
int output;
output = 0;
length = 0;
count = 0;
total = 0;
cin >> total;
while (total != count){
cin >> sentence;
length = strlen(sentence);
while (length != lengthcount)
if (sentence[length] == "a" ||sentence[length] == "e"||sentence[length] == "i"||sentence[length] == "o"||sentence[length] == "u"||sentence[length] == "y"){
++ output;
++ lengthcount;
else{
++lengthcount;
}
}
++count;
}
return 0;
}
sentence[length]
- это один символ. Его следует сравнивать с 'a'
а не "a"
.
"a"
- это массив символов, и прямое сравнение со встроенным operator==
не поддерживается.
sentence[index] == 'a'; // where index is probably lengthcount in your example
Должен сделать трюк. Если использование std::string
является опцией, вы должны char
массивы over char
.
Кроме того, ваше char sentence[] = "";
потребуется немного больше места, чем только символ '\0'
. Некоторые альтернативы включают использование std::string
и std::getline
или char[nnn]
с cin.get(...)
чтобы убедиться, что вы не переполняете выделенный буфер.
cout << output
но вывод всегда равен 0, по какой-то причине он не увеличивается. Я тоже последовал твоему совету и сейчас использую string
sentence
является char[1]
.
См. Ответ Nialls для одной из основных проблем.
Алгоритмическая проблема с вашим кодом снова содержится в инструкции if
.
sentence[length]
возвращает последний символ вашего c_string (в этом случае нулевой символ '/0'
который завершает строку).
Ваше утверждение if должно выглядеть больше:
if (sentence[lengthcount] == 'a'\
||sentence[lengthcount] == 'e'\
||sentence[lengthcount] == 'i'\
||sentence[lengthcount] == 'o'\
||sentence[lengthcount] == 'u'\
||sentence[lengthcount] == 'y')
{
\\do something
}
Не забудьте также заранее выделить место для строки, т.е.
char sentence[50];
который даст вам пространство для 49 символов + терминатор. Кроме того, используйте std::string
Если вы хотите подсчитать общее количество гласных в данной строке, вам нужно использовать sentence[lengthcount]
. Предположим, что sentence
abc
strlen(sentence)
вернет 3, и поскольку в c++ индексирование начинается с 0, а не 1, поэтому предложение [длина] будет проверять "\ 0", следовательно, во всем цикле, который вы проверяете против последнее значение, которое является "\ 0", что бессмысленно. Кроме того, не забудьте инициализировать длину. Оставь все вещи, упомянутые выше.
char предложение [] = "" создает предложение массива длиной 1.
cin >> предложение не будет работать очень хорошо, не так ли, если предложение не может содержать более одного символа, и один символ уже необходим для конечного нулевого байта?
lengthcount - это унифицированная переменная, а остальная часть кода просто заставляет мою голову болеть.
if (sentence[length] == 'a'...
sentence
, которое являетсяchar[1]
.