C ++ гласные в строке, сравнение запрещено

0

Я пытаюсь подсчитать общее количество гласных в строке. Я использую 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;
}
  • 2
    if (sentence[length] == 'a'...
  • 0
    Кроме того, у вас есть неопределенное поведение, когда вы читаете sentence , которое является char[1] .
Показать ещё 3 комментария
Теги:

4 ответа

4
Лучший ответ

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(...) чтобы убедиться, что вы не переполняете выделенный буфер.

  • 0
    Спасибо, код компилируется, и я добавил cout << output но вывод всегда равен 0, по какой-то причине он не увеличивается. Я тоже последовал твоему совету и сейчас использую string
  • 2
    Обратите внимание, что есть UB, потому что sentence является char[1] .
2

См. Ответ 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

1

Если вы хотите подсчитать общее количество гласных в данной строке, вам нужно использовать sentence[lengthcount]. Предположим, что sentence abc strlen(sentence) вернет 3, и поскольку в c++ индексирование начинается с 0, а не 1, поэтому предложение [длина] будет проверять "\ 0", следовательно, во всем цикле, который вы проверяете против последнее значение, которое является "\ 0", что бессмысленно. Кроме того, не забудьте инициализировать длину. Оставь все вещи, упомянутые выше.

0

char предложение [] = "" создает предложение массива длиной 1.

cin >> предложение не будет работать очень хорошо, не так ли, если предложение не может содержать более одного символа, и один символ уже необходим для конечного нулевого байта?

lengthcount - это унифицированная переменная, а остальная часть кода просто заставляет мою голову болеть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню