0、题目概述
【问题描述】
输入一行文本,分别统计出其中英文字母、空格、整数数字和其他字符的个数。
【输入形式】
输入一行文本。
【输出形式】
共四行,分别输出该行文本中的英文字母、空格、整数数字和其他字符的个数。
【样例输入】
6t 4er;9.3e r 2
【样例输出】
alpha:5
space:4
digit:5
other:2
1、分析
这一题是比较基础的题目。
题目要求将一个字符串分成四类:字母、空格、整数数字和其他字符。通过ASCALL可以很快的完成分类。
但是有一个点要注意:字符串的长度是未知的,并且题目没有告诉我们数据范围(再次吐槽一下学校的oj题不给范围)。
2、解决方案
注意到结束符是回车,所以想到用getchar() (可以读入tab,space,enter),当读到’\n’的时候结束
3、代码
#include <iostream>
using namespace std;
int main()
{
char c;//用于读入字符
int a,s,d,o;
a=0;s=0;d=0;o=0;//取单词首字母计数
while (c=getchar())//读入c
{
if (c=='\n') break;//判断是否结束
if (( (c>=65) && (c<=90) ) || ( (c>=97) && (c<=122) )) a++;
else if ((c>=48)&&(c<=57)) d++;
else if (c==32) s++;
else o++;
} //根据ascall码进行分类
cout<<"alpha:"<<a<<endl
<<"space:"<<s<<endl
<<"digit:"<<d<<endl
<<"other:"<<o<<endl;//输出
return 0;
}
4、总结
这道题是一道基础题,不知道为什么考试的时候没有做出来。(钛丢脸了)
收获:
- 学会了ascall的简单应用
- 学会了if的简单嵌套
- 学会了如何读入一段未知长度的字符串