/* 题目描述 输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。 输入 一行字符 */ #include<iostream> using namespace std; int main() { int c; int clen=0,nlen=0,llen=0,elen=0; while((c=getchar())!='\n')//while里的表达式(c = getchar()) != '\n',意思是,当输入的字符不是换行符的时候,继续往下执行 { //while((c=getchar())!='\n')注意这里的括号不能丢,因为!=的优先级比=高,如果去掉了外面的括号就等价于 c = (getchar()!='\n') if((int('A')<=c&&int('Z')>=c)||(int('a')<=c&&int('z')>=c)) { llen++; continue; } if(int('0')<=c&&int('9'>=c)) { nlen++; continue; } if(int(' ')==c) { elen++; continue; } clen++; } cout<<llen<<' '<<nlen<<' '<<elen<<' '<<clen; return 0; }
在这里我们会用到getchar()函数,简单来说,getchar()就是从键盘获取字符,直到回车为止;
代码中while里的表达式(c = getchar()) != '\n',意思是,当输入的字符不是换行符的时候,继续往下执行;
注意这里的括号不能丢,因为!=的优先级比=高,如果去掉了外面的括号就等价于 c = (getchar()!='\n');
#include<stdio.h> int main() { int letter = 0,number = 0,blank = 0,others = 0,c; //分别为字母、数字、空格、其他 while((c = getchar()) != '\n'){ if(c >= 'A' && c<='Z' || c >= 'a' && c <= 'z') //判断是否为字母 letter++; else if(c >= '0' && c <= '9') //判断是都为数字 number++; else if(c == ' ') //判断是否为空格 blank++; else //其他 others++; } printf("%d %d %d %d\n",letter,number,blank,others); return 0; }
原题链接:
[编程入门]字符串分类统计
解题思路:C标准中有一个一个头文件<ctype.h>,这里面定义了一批C语言字符处理函数,用于测试字符是否属于特定的字符类别,如字母字符、控制字符、数字、等等;
头文件:<ctype.h>
函数:
(1)int isalpha(int ch);
判断ch是否为字母,如果是返回非0,反之返回0;
(2)int isdigit(int ch);
判断ch是否为数字,如果是返回非0,反之返回0;
(3)int islower(int ch);
判断ch是否为小写字母,如果是返回非0,反之返回0;
(4)int isupper(int ch);
判断ch是否为大写字母,如果是返回非0,反之返回0;
……
等等很多处理字符的函数,大家有兴趣可以去看看博客。
#include <stdio.h> #include <ctype.h> int main() { int letter = 0,number = 0,blank = 0,others = 0,c; //分别为字母、数字、空格、其他 while((c = getchar()) != '\n'){ if(isalpha(c)) //判断是否为字母 letter++; else if(isdigit(c)) //判断是都为数字 number++; else if(c == ' ') //判断是否为空格 blank++; else //其他 others++; } printf("%d %d %d %d\n",letter,number,blank,others); return 0; }