给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数

题目描述:给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数。
字母: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;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值