说明:使用值返回功能编写一个程序,提示用户输入一系列字符并输出元音数。这是教练给出的问题..
#include <iostream>
using namespace std;
bool isVowel(char ch);
int main() {
char ch;
cout << "Enter a character: ";
cin >> ch;
cout << ch << " is a vowel: " << isVowel(ch) << endl;
return 0;
}
bool isVowel(char ch){
if (ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U' ||
ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u'){
return true;
} else
return false;
}
char
是单个字符,而不是句子。对于一个句子使用string
。
string s;
cout << "Enter a sentence: ";
cin >> s;
然后使用循环遍历句子的每个字符
for (char ch : s)
{
...
}
然后使用isVowel
测试单个字符,如果找到则增加计数。线索的名称是isVowel
,而不是countVowels
,所以isVowel
应该测试单个元音并返回true或false,不计算元音的数量。
int vowels = 0;
for (char ch : s)
{
if (isVowel(ch))
vowels++;
}
最后写isVowel
来测试单个角色。
bool isVowel(char ch)
{
return ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U' ||
ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u';
}
这里有几个问题。
首先,您不初始化元音。你可能意味着int vowels = 0;
或int vowels {0};
。
其次,你正在用cin >> ch;
读一个角色。我怀疑你的意思是循环输入字符串。
第三,你对isVowel
的签名是bool isVowel(int vowels, char ch);
,它返回一个bool。但是你已经编写了你的函数,因为它正在操纵整数元音。这种不一致没有意义。
第四,将isVowel
的结果赋值给ch = isVowel(vowels,ch);
中的一个字符。然后你再次使用isVowel
中更新的ch
调用cout << isVowel(vowels, ch) << ...
。我不确定你在这里尝试做什么,但这也没有任何意义。
您需要重新访问所有这些代码。你可能希望isVowel
实际返回一个布尔值。您可能希望迭代整个输入字符串,并适当调整vowels
的值(初始化之后)。
您的程序正在运行未定义的行为;你没有初始化使用vowels
。
例如,您可以创建将元音计数器作为对整数的引用的函数。
void isVowel(int& counter, char ch) {
std::string vowels{ "AaEeIiOoUu" };
for (auto c : vowels)
if(ch == c)
counter++;
}
int main(){
char ch;
int counter{};
while (std::cin >> ch)
isVowel(counter, ch);
std::cout << counter << endl << " vowels in this sentence." << endl;
}
#include <iostream>
using namespace std;
bool isVowel(int vowels, char ch);
所以isVowel
返回bool
。如果它的目的是告诉我们单个字符是否是元音,那将是有意义的。出于某种原因,我们将一个名为vowels
的整数传递给它。这似乎没有任何意义。它对整数值有什么作用?
int main() {
char ch;
所以ch
是一个单一角色。好的。
int vowels;
vowels
是一个没有特定值的整数。
cout << "Enter a sentence: ";
cin >> ch;
哦,哦。我们要求用户输入一个句子,然后我们读入一个字符。记住,ch
是一个char
。
ch = isVowel(vowels,ch);
哦,哦。我们没有给vowels
任何特定的值,所以我们没有给isVowel
特别的价值。此外,我们获取返回的布尔值并将其分配给char
类型的变量。我们为什么要这样做?
cout << isVowel(vowels, ch) << " vowels in this sentence." << endl;
然后由于某种原因我们再次打电话给isVowel
。这没有多大意义。此外,isVowel
返回了bool
(是或否)。为什么我们输出那个就像元音的数量一样?
return 0;
}
// build a string counter and make it callable
bool isVowel(int vowels, char ch){
好的,所以isVowel
返回一个布尔值,并将整数和一个字符作为输入。
for (int i = 0; i < ch; i++){
if (ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U' ||
ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u'){
vowels++;
}
我们从零循环到单个字符的值?这没有意义。
}
return vowels;
}
这里有很多问题。因为这段代码存在很多基本问题,所以你似乎已经尝试了一个超出C ++知识的问题,你应该首先尝试更简单的方法,例如接受句子作为输入并将其重复给用户而不使用任何其他功能。