C语言统计给定列表中不含元音单词数的代码问题求助
问题解答
现有代码的问题
- 索引使用错误:内层循环遍历当前单词字符时,误用
j作为单词索引取List[j],实际应该用外层的单词索引i取List[i];读取字符时每次只取单词首字符*List[j],没有按字符索引取List[i][j] - 逻辑运算符错误:判断字符不是元音时使用
||(逻辑或),该条件对任意字符都永远成立,应该替换为&&(逻辑与) - 计数逻辑错误:当前代码是每遇到一个非元音字符就计数+1,需求是整个单词完全不含元音时才对该单词计数1次,计数维度完全错误
正确实现代码
#include <string.h> int noVowel(char *List[], int nSize) { int count = 0; // 遍历所有单词 for (int i = 0; i < nSize; i++) { int hasVowel = 0; // 标记当前单词是否包含元音 int len = strlen(List[i]); // 遍历当前单词的每个字符 for (int j = 0; j < len; j++) { char cur = List[i][j]; if (cur == 'a' || cur == 'e' || cur == 'i' || cur == 'o' || cur == 'u' || cur == 'A' || cur == 'E' || cur == 'I' || cur == 'O' || cur == 'U') { hasVowel = 1; break; // 已经找到元音,无需继续遍历当前单词 } } // 整个单词没有元音,计数+1 if (!hasVowel) { count++; } } return count; }
实现说明
- 新增
hasVowel标记位,用于判断单个单词是否存在元音 - 提前计算单词长度存入变量,避免循环中重复调用
strlen损耗性能 - 补充了大写元音的判断,兼容大写输入场景,如果不需要可以自行删除对应判断条件
- 找到元音后直接跳出当前单词的遍历,减少不必要的计算
内容的提问来源于stack exchange,提问作者user13839242
相关产品推荐
相关产品推荐

