当用户输入10个字母时,程序应告知其中有多少个元音。我写了这段代码:
while (count<10)
{
cin >> n;
count++;
if (n == 'A' || n == 'a' && n == 'E' || n == 'e' && n == 'I' || n == 'i' && n == 'O' || n == 'o' && n == 'U' || n == 'u')
{
total++;
}
}
cout << total << endl;
即使用户输入了元音,这也会产生输出0。有问题?
最佳答案
让我们从减少条件开始,只看a
和e
if (n == 'A' || n == 'a' && n == 'E' || n == 'e')
然后仅考虑小写字母以简化操作(但保留了问题)
if (n == 'a' && n == 'e')
如果您大声朗读,它会显示“如果
n
是'a'
而n
是'e'
”。 “AND”(来自&&
运算符)表示两个条件都必须为真。您在这里创建了一个不可能的条件,如果n
是'a'
,那么它不是'e'
,因此您得到if (true && false)
-这是错误的。如果n
是'e'
,则它不是'a'
,因此您得到if (false && true)
。如果至少有一个相等比较为真,则只需将所有
&&
(和)运算符替换为||
(或)运算符即可使条件为true。if (n == 'A' || n == 'a' || n == 'E' || n == 'e'
|| n == 'I' || n == 'i' || n == 'O' || n == 'o'
|| n == 'U' || n == 'u')
有一些方法可以简化条件。
一种是添加
#include <cctype>
并使用 std::tolower
将n
转换为小写,然后只需要与小写字符进行比较。n = std::tolower(n);
if (n == 'a' || n == 'e' || n == 'i' || n == 'o' || n == 'u')
另一种较少重复的方法是创建一个带有所有元音的
std::string
,然后在顶部添加see if it contains n
,#include <string>
。std::string vowels = "aeiouAEIOU";
while (/*...*/) {
// ...
if (vowels.find(n) != std::string::npos) {
++total;
}
}
正如n314159所指出的,如果您使用的是C++ 17或更高版本,则可以使用
std::string_view
来代替,它更便宜。 #include <string_view>
static constexpr std::string_view vowels = "aeiouAEIOU";
while (/*...*/) {
// ...
if (vowels.find(n) != std::string_view::npos) {
++total;
}
}
关于c++ - 计算元音C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59093230/