C++统计元音与空格数量异常:输入字符串后结果全为0
C++元音字母与空格统计结果全为0的修复方案
问题根源
你的代码统计结果全为0,核心是两个关键错误:
- 输入逻辑错误:
cin >> str[99];仅读取单个字符存入数组最后一位,且cin默认遇到空格就停止读取,导致输入的"WELCOME TO ARRAYS"只有首字符被存入,后续内容完全没进入数组。 - 字符串终止符缺失:未初始化的
char str[100]内存是随机值,strlen(str)依赖末尾的'\0'计算长度,没有正确终止符的话,循环无法正确遍历有效字符。
微调后的代码
#include <iostream> #include <cstring> // 补充strlen所需的头文件 #include<conio.h> using namespace std; int main() { char str[100] = {0}; // 初始化数组为全0,确保字符串有正确终止符 int a, e, i, o, u, whitespace; a = e = i = o = u = whitespace = 0; int k; cout << "Enter a string: "; cin.getline(str, sizeof(str)); // 改用getline读取含空格的整行输入 for (k = 0; k < strlen(str); k++) { if (str[k] == 'A') a++; else if (str[k] == 'E') e++; else if (str[k] == 'I') i++; else if (str[k] == 'O') o++; else if (str[k] == 'U') u++; else if (str[k] == ' ') whitespace++; } cout << "\nVowels:\n"; cout << "A " << a; cout << "\nE " << e; cout << "\nI " << i; cout << "\nO " << o; cout << "\nU " << u; cout << "\nWhitespaces - " << whitespace; return 0; }
修改说明
- 数组初始化:
char str[100] = {0};让数组所有元素初始化为0,保证字符串末尾存在'\0',strlen能正确计算有效长度。 - 输入方式替换:
cin.getline(str, sizeof(str));可以读取包含空格的整行内容,直到换行符为止,sizeof(str)避免数组越界。 - 补充头文件:显式添加
<cstring>,确保strlen函数能正常编译(部分编译器可能隐式包含,但规范写法需要显式声明)。
输入"WELCOME TO ARRAYS"后,会得到正确统计结果:A:1,E:2,O:2,空格数:2,其余元音为0。
内容的提问来源于stack exchange,提问作者Mangoenoot
相关产品推荐
相关产品推荐

