【问题标题】:Why isn't my function able to determine whether or not a char is a vowel?为什么我的函数不能确定 char 是否是元音?
【发布时间】:2018-12-16 15:02:45
【问题描述】:

我正在制作一个计算字符串元音的基本程序。我想尝试使用 bool 函数来测试每个 char 是否是元音,但是每当我输入带有元音的字符串时,它都不会增加 vowels int。

#include <iostream>

using namespace std;

bool isVowel(char){
 char chara;
 return (tolower(chara) == 'a' || tolower(chara) == 'e' || 
   tolower(chara) == 'i' || tolower(chara) == 'o' || 
   tolower(chara) == 'u' || tolower(chara) == 'y');
}

int main()
{
   string input;
   int vowels = 0;

   cin >> input;

   for(unsigned int i = 0; i<input.length(); i++){
      if( isVowel(input.at(i)) )
         vowels++;
   }
   cout << "Including a, e, i, o, u, and y, that word contains " << vowels << " vowels.\n";
}

例如,当我在控制台输入“hello”作为输入时,vowels 整数的值为 0。我的函数有什么问题?

【问题讨论】:

  • chara 是一个未初始化的变量,与函数参数分开且无关(您忽略了命名,因此无法引用)。您可能想查阅您最喜欢的 C++ 101 教科书,了解如何实现函数。
  • 一个好的编译器能够警告你未初始化变量的使用。如果您的编译器现在不这样做,那么您需要在构建时启用更多警告。我真的建议您将几乎所有警告都视为错误。
  • 顺便说一句,我认为const auto vowels = std::count_if(input.cbegin(), input.cend(), [](const char c){ return isVowel(c);}); 也有效且简单。

标签: c++ function error-handling parameter-passing


【解决方案1】:

你弄错了函数参数的语法,无意中写了一些合法的东西,但没有按照你的预期去做。像这样写

bool isVowel(char chara) {
    return chara == 'A' || chara == 'E' || 
        chara == 'I' || chara == 'O' || chara == 'U' || chara == 'Y' || 
        chara == 'a' || chara == 'e' || chara == 'i' || chara == 'o' || 
        chara == 'u' || chara == 'y';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多