题目描述:给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数。
字母:A, B, …, Z、a, b, …, z组成
数字:0, 1, …, 9
空格:" "(不包括引号),剩下的全为其他字符。
输入:测试数据可以有多组。每组数据为一行(长度不超过10000)。数据输入至文件结束EOF(键盘上按下ctrl-z)为止。
输出:每组输入对应一行输出。
样例输入:
A0
Are you ok?
样例输出:
第1行 字母1 数字1 空格1 其他1
第2行 字母8 数字0 空格2 其他1
算法描述:首先利用语句while(scanf("%c",str[sum])!=EOF)实现输入多行,并利用sizeof获取输入的行数,为了后面用gets_s(str[sum], str_len)分别输入每行的字符,直到换行然后按Ctrl+Z结束。后面利用多个for循环语句及条件语句if进行统计每行的各个字符数并输出统计后的结果。
//给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数
#define __STDC_WANT_LIB_EXT1__ 1
#include<stdio.h>
#include<string.h>
int main(void)
{
int sum=0; //输入每行的字符数
char str[100][10001];
while(scanf("%c",str[sum])!=EOF) //实现可输入多行
{
size_t str_len=sizeof(str[sum]);//获取输入的行数
gets_s(&str[sum][1],str_len); //输入每行的字符,直到换行然后按Ctrl+Z结束
++sum; //统计每行的字符数
}
for(int i=0;i<sum;i++)
{
int n=strlen(str[i]); //n为每行的字符数,用于下面的循环
int letter_num=0;
int space_num=0;
int digit_num=0;
int other_num=0;
for(int j=0;j<n;j++)
{
if((str[i][j]>='A'&&str[i][j]<='Z')||(str[i][j]>='a'&&str[i][j]<='z'))
++letter_num;
else if(str[i][j]==' ')
++space_num;
else if(str[i][j]>='0'&&str[i][j]<='9')
++digit_num;
else
++other_num;
}
printf("字母%d数字%d空格%d其他%d\n",letter_num,digit_num,space_num,other_num);
}
return 0;
}