c语言经典题目:ascll字符数量的计算

今天在网上又看到了这道题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

提示:输入的字符可以是任意,当然也可以加空格。

这里的知识点就是ASCII值,只要我们把相关知识点掌握:

a-z:97-122; A-Z:65-90; 空格:32; 0-9:48-57;

因此我们很好知道应该怎么去敲了,如下所示:

#include <stdio.h>
int main (void)
{
          
   
	char txt[] = "0";
	int num = 0;
	int i = 0;
	int j = 0;

	int  word= 0;
	int  spa = 0;
	int  shuzi = 0;
	int other = 0;

	printf("请输入一行字符;");
	gets_s(txt);           //这里不能用scanf

	while (txt[i] != )  //这里一定是 ,不要再犯我以前的错误哦
	{
          
   
		num = txt[i] + 0; //很关键的一步,数字转换

		if (97 <= num <= 122)
		{
          
   
			word++;

		}
		else if (65 <= num <= 90)
		{
          
   
			spa++;

		}
		else if (num == 32)
		{
          
   
			shuzi++;
		}
		else
		{
          
   
			other++;
		}
		i++;     
	}
	printf("输入的字符为:");
	for (j = 0; j < i; j++)
	{
          
   
		printf("%c", txt[i]);
	}
	printf("
其中,中英文字母个数为: %d 
", word);
	printf("空格个数为: %d 
", spa);
	printf(" 数字个数为: %d 
", shuzi);
	printf("其他字符个数为: %d 
", other);
	






	return 0;
}

这篇博客我现在写的看起来很“轻松”,但是我得承认,这道题目对于我这个文科生来说,最开始看到的时候,思考了半天,曾经犯过几个错误,因为不知道怎么查资料,导致一时半会儿,想过放弃:

1.使用了scanf,而没用gets函数

scanf函数读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以scanf函数无法读取含有空格的字符串,所以在本例读取输入时(涉及空格),要改用gets(p)函数,读取的字符串存入字符串指针p中。

2.输入的gets而不是gets_s

这是因为vs版本迭代的原因

3.用的0,而不是’ ’

‘0’和‘’的区别。有一个共同点就是它们都是字符,’代表的是空字符,而0代表一个ascll值,48,因此并非真正空。

真诚的希望这篇博客可以帮助到正好遇到这个问题的小伙伴们

经验分享 程序员 微信小程序 职场和发展