如何解决“条件中的变量声明必须具有初始化程序”

时间:2019-03-28 09:34:39

标签: c++ c++11

我正在编写一个程序,该程序计算用户输入的元音的数量,但是却给我一个错误“条件中的变量声明必须具有初始化程序”。您如何解决?

#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 个答案:

答案 0 :(得分:8)

使用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();
}

答案 1 :(得分:3)

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设为静态和常量,这可能会提高性能。

答案 2 :(得分:3)

其他人已经对该问题做出了充分的回答,但以下可能是有效的选择:

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

我运行了一些基准测试,并比较了在大小为10k的随机字符串上提出的所有解决方案; Here are the results(条形越低,代码越快=越快):

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

enter image description here

  1. gcc-8.1 -O3 -std+c++20 enter image description here

答案 3 :(得分:1)

我认为这是最简单的:

bool isVowel(char c) 
{
  char Vowels[] = "AEIOUaeiou";
  if ( strchr(Vowels,c) )
    return true;
  else
    return false;
}

答案 4 :(得分:0)

为此,您也可以按以下方式用if循环替换

for(int i=0 ; i < Vowels.length-1 ; i++) {
     if(Vowels[i]==c)
     return true; 
}