用switch语句编写程序,统计输入的一串字母中元音字母(a,e,i,o,u)的总个数和每个元音字母出现的次数,当输入#时,输入结束。说明:要考虑字母大小写,且不使用数组及指针情况下
时间: 2024-11-09 07:31:30 浏览: 32
当你想用`switch`语句在C++中统计输入字符串中的元音字母(包括大小写)以及它们各自的出现次数,但又不想使用数组或指针时,你可以采用字符串流(stringstream)和字符逐个处理的方式来实现。这里是一个简单的示例:
```cpp
#include <iostream>
#include <sstream>
#include <string>
std::string count_vowels(const std::string& input) {
if (input == "#") return ""; // 结束条件
int vowel_count[5] = {0}; // 初始化元音计数器,a, e, i, o, u
std::istringstream iss(input);
char current_char;
while (iss >> std::noskipws >> current_char) { // 遍历输入字符串
switch (tolower(current_char)) { // 将字符转换为小写并处理
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
vowel_count[tolower(current_char) - 'a']++; // 更新对应元音的计数
break;
}
}
std::ostringstream oss; // 创建输出流
for (int i = 0; i < 5; i++) {
if (vowel_count[i]) oss << "Uppercase " << static_cast<char>('A' + i) << ": " << vowel_count[i] << ", ";
if (vowel_count[i + 5]) oss << "Lowercase " << static_cast<char>('a' + i) << ": " << vowel_count[i + 5] << ", ";
}
// 去除末尾多余的逗号和空格
oss.seekp(-2, std::ios_base::end); // 移动到倒数第二个字符
oss.pop(); // 删除末尾的逗号
oss.seekp(-1, std::ios_base::end); // 移动到倒数第一个字符
return oss.str();
}
int main() {
std::string input;
std::cout << "Enter a string or '# to stop: ";
std::getline(std::cin, input);
std::string result = count_vowels(input);
if (!result.empty()) {
std::cout << "Vowel counts: " << result << std::endl;
}
return 0;
}
```
这个程序首先创建了一个字符串流来处理输入的字符,然后使用`switch`语句判断字符是否为元音。遇到非元音字符时不进行任何操作,而元音则更新相应的计数器。最后,根据计数器计算每个元音字母在大写和小写的出现次数。
阅读全文