如何在C语言中输出文本的字母总数(格式如letters:X)而非逐次打印计数数字
解决字母计数格式问题
嘿,我一眼就瞅出问题所在啦!你现在的代码每次统计到一个字母就立刻打印当前的计数,所以才会输出一串连续数字(比如6个字母就打印123456)。而且还有个隐藏的逻辑错误——你写的字母判断条件不对,咱们一步步来改:
问题拆解
- 错误的字母判断逻辑:你写的
(para[i]>='a' || para[i]<='z') && (para[i]>='A' || para[i]<='Z')完全不对,这个表达式永远为真(因为任何字符要么≥a,要么≤z),还会把非字母的字符也统计进去。其实直接用<ctype.h>里的isalpha()函数最靠谱,它会直接判断字符是否为字母。 - 错误的打印时机:你在循环内部每次计数就打印,导致输出连续数字,应该等所有字母统计完成后,再一次性按要求格式输出。
- 多余的空格判断:空格本来就不是字母,
isalpha()会自动排除,所以para[i]!=' '这个判断完全没必要。
修改后的代码
#include <stdio.h> #include <ctype.h> #include <cs50.h> #include <string.h> int main(void){ int letter = 0; // 这里words和sentences变量如果没用可以暂时注释掉 // int words = 0; // int sentences = 0; string para = get_string("Text:"); for(int i = 0; i < strlen(para); i++){ // 用isalpha判断是否为字母,简洁又准确 if(isalpha(para[i])) { letter++; // 删掉循环里的printf,不要在这里打印计数 } } // 循环结束后,按要求格式输出 printf("letters:%i\n", letter); }
测试效果
比如输入text is,程序会统计到6个字母,最终输出:
letters:6
如果输入hello,就会输出:
letters:5
完美符合你的需求啦!
内容的提问来源于stack exchange,提问作者haseen
相关产品推荐
相关产品推荐

