【发布时间】: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