Time Limit: 1 second
Memory Limit: 2 MB
问题描述
输入一串字符串,分别统计数字、大小写字母和其他字符的个数,最后以“?”结束。(其他字符不包含"?")
Input
一行,一个字符串,以“?”结束。
Output
三行,分别显示三种字符的个数
Sample Input
2s0d3s<5?
Sample Output
letter:3 digit:4 other:1
【题解】
用一个while 一个 变量i 就可以了。一直扫描到问号,之前的字符和数字用if判断一下就可以了。a[1..3]数组 用来存取各个不同的类型的数据的数量。
【代码】
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
string s1;
int a[4]; //a[1..3]分别表示字母,数字 ,其他
void input_data()
{
char a[300];
cin.getline(a,300); //怕有空格直接整行读取
s1 = string(a);
for (int i = 1;i <= 3;i++)
a[i] = 0;
}
void get_ans()
{
int i = 0;
while (s1[i] != '?')
{
if (s1[i] >= '0' && s1[i] <= '9') //这里是判断数据的类型
a[2]++;
else
if ((s1[i] >= 'A' && s1[i] <='Z' )|| (s1[i] >= 'a' && s1[i] <= 'z'))
a[1]++;
else
a[3]++;
i++;
}
}
void output_ans()
{
printf("letter:%d
",a[1]);
printf("digit:%d
",a[2]);
printf("other:%d",a[3]);
}
int main()
{
//freopen("F:\rush.txt","r",stdin);
input_data();
get_ans();
output_ans();
return 0;
}