输入一行字符,分别统计出其中英文字母、空格、数字和另外字符的个数?

发布日期:2018-06-06 来源:财富国际在线 阅读:
输入一行字符,分别统计出其中英文字母、空格、数字和另外字符的个数? yang leonier 2小时前 189 字符 考试遇到,直接没思路
0 0
其他回答

我用C语言实现给出一个思路。对于题主的问题,可以考虑使用getchar()函数来实现,具体的步骤是这样的:5Ya财富国际

  1. 使用getchar()函数从stdin,更准确的说,是从缓冲区中逐个读入字符;
  2. 判断当前读入的字符属于数字还是字母还是空白字符还是其他字符;
  3. 根据当前读入的字符类型,使得对应的字符计数器自增1;
  4. 如果读取到EOF,则表明读取完毕。

上述步骤中,有几个技术点需要你去了解的:getchar()函数的使用,缓冲区的概念,标准输入stdin的概念,输入结尾标记EOF的概念。关于这些概念,我在另一个回答中已经阐明,有兴趣的可以参考我的这个回答:C语言统计输入的字符数? - 百晓知道5Ya财富国际

回到当前问题中来,按照上述思路,可以初步拟定一份代码如下:5Ya财富国际

#include <stdio.h>#include <ctype.h>/*欢迎关注:微博: http://weibo.com/520JDH微信: C语言编程技术分享 百晓知道: zhihu.com/people/520WXCSDN博客: http://blog.csdn.net/kelehaier */int main(void){	int digit_count = 0, alpha_count = 0, blank_count = 0, other_count = 0;	int ch;	while( (ch = getchar()) != EOF )	{		if(isdigit(ch)){			digit_count++;			continue;		}		if(isalpha(ch)){			alpha_count++;			continue;		}		if( (ch == '/n') || (ch == ' ') || (ch == '/t') ){			blank_count++;			continue;		}		other_count++;		//putchar(ch);	} 	putchar('/n');	printf("数字字符个数: %d/n", digit_count);	printf("字母字符个数: %d/n", alpha_count);	printf("空白字符个数: %d/n", blank_count);	printf("其他字符个数: %d/n", other_count);	return 0;}

代码不长,应该比较好理解。换行符'/n'、空格符' '、制表符'/t'都算作空白字符。5Ya财富国际

但是对于统计中文字符,代码还有所欠缺,不过对于统计一般的字符应该绰绰有余了。我运行了下,结果如下:5Ya财富国际


5Ya财富国际

最后我是以CTRL+Z来模拟键盘输入结束!5Ya财富国际

题主有兴趣,可以关注我的微信公众号“C语言编程技术分享”或者扫描我头像关注我,会有C语言编程相关文章分享!5Ya财富国际

石家的鱼 2小时前 0条评论
0 0
字母数字空格好办,POSIX和M$都有相应的扩展函数可以判断字母数字;中文稍微麻烦,GBK还算简单读第一个字节如果不是字母数字空格就判断是否大于0x80小于0xFF,然后继续往后读一个字节看是否大于0x40,且不等于0x7F或者0xFF 必须同时满足这两个条件才算一个GBK的字符
参考文献 Windows Codepage 936

写了一个例子,没认真写
#include <stdio.h>#include <string.h>int main(int argc, char* argv[]){    unsigned char Seq[256];    int i,l;    int nAlpha = 0, nNum = 0, nSpace = 0, nGBK = 0;    printf("Input a sequence:/n");    fgets(Seq, 256, stdin);    l = strlen(Seq);    for(i = 0; i < l; ++i)    {        if(isdigit(Seq[i]))        {            ++nNum;            continue;        }        if(isalpha(Seq[i]))        {            ++nAlpha;            continue;        }        if(Seq[i]==0x20)        {            ++nSpace;            continue;        }        if(Seq[i]<0xFF && Seq[i]>0x80)        {            if(Seq[i+1] > 0x40)                if(Seq[i+1]!=0x7F && Seq[i+1]!=0xFF)                {                    ++nGBK;                    ++i;                    continue;                }        }                }    printf("%d Alphabets, %d Numbers, %d Spaces, %d GBK 2-byte Characters in the sequence/n",        nAlpha, nNum, nSpace, nGBK);}
运行测试
yang leonier 2小时前 0条评论
0 0

关于我们 联系我们招聘信息免责申明广告服务 网站地图 百度地图 TAG标签

Copyright@2018-2022 Cfgjzx.Com 财富国际在线 版权所有 All Rights Reserved   
财富国际提供:最新财富资讯、房产资讯、股票资讯、区块链、投资理财、保险导购、健康产品、公私募基金,易经等资讯及服务.