Как исправить "Объявление переменной в условии должно иметь инициализатор" - PullRequest
1 голос
/ 28 марта 2019

Я пишу программу, которая подсчитывает количество гласных, которые вводит пользователь, но выдает ошибку «Объявление переменной в условии должно иметь инициализатор».Как вы это исправите?

#include <iostream>
using namespace std;

int isVowel(char c) 
{
  char Vowels[] = {'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'};
  if (c in Vowels)
    return true;
}

int main()
{
  int n;
  int numVowel = 0;
  char c;

  cin >> n;

  for (int i = 0; i < n; ++i)
  {
    cin >> c;
    if (isVowel(c))
      numVowel++;
  }

  cout << "Number of vowels = " << numVowel << endl;

  return 0;
}

Ответы [ 5 ]

8 голосов
/ 28 марта 2019

Использование std::find

#include <algorithm>
#include <array>

bool isVowel(char c)
{
    static constexpr std::array<char, 10> Vowels{ 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u' };
    return std::find(Vowels.begin(), Vowels.end(), c) != Vowels.end();
}
3 голосов
/ 28 марта 2019

Другие ответили адекватно на этот вопрос, но следующие могут быть допустимой альтернативой:

bool isVowel(const char c) {
  switch (tolower(c)){
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
          return true;
  }
  return false;
}

Я провел несколько тестов и сравнил все предложенные решения на случайной строке размером 10k; Вот результаты (чем ниже планка, тем лучше = быстрее код):

  1. Clang 7.0 -O3 -std=c++20

enter image description here

gcc-8.1 -O3 -std+c++20 enter image description here
3 голосов
/ 28 марта 2019

В C ++ нет оператора in.

Вы, вероятно, хотите это:

int isVowel(char c)
{
  static const char Vowels[] = { 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u' };
  for (const auto & v : Vowels)
    if (c == v)
      return true;

  return false;
}

Бонус: вы должны сделать Vowels статическим и постоянным, это может быть немного более производительным.

1 голос
/ 28 марта 2019

Я думаю, что самый простой это:

bool isVowel(char c) 
{
  char Vowels[] = "AEIOUaeiou";
  if ( strchr(Vowels,c) )
    return true;
  else
    return false;
}
0 голосов
/ 29 марта 2019

На это вы также можете заменить цикл for следующим образом:

for(int i=0 ; i < Vowels.length-1 ; i++) {
     if(Vowels[i]==c)
     return true; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...