明天在网上又看到了这道题目:
输出一行字符,别离统计出其中英文字母、空格、数字和其它字符的个数。
提醒:输出的字符能够是任意,当然也能够加空格。
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] != '\0') //这里肯定是\0 ,不要再犯我以前的谬误哦 { 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("\r\n其中,中英文字母个数为: %d \r\n", word); printf("空格个数为: %d \r\n", spa); printf(" 数字个数为: %d \r\n", shuzi); printf("其余字符个数为: %d \r\n", other); return 0;}
这篇博客我当初写的看起来很“轻松”,然而我得抵赖,这道题目对于我这个文科生来说,最开始看到的时候,思考了半天,已经犯过几个谬误,因为不晓得怎么查资料,导致一时半会儿,想过放弃:
1.应用了scanf,而没用gets函数
scanf函数读取字符串时以空格为分隔,遇到空格就认为以后字符串完结了,所以scanf函数无奈读取含有空格的字符串,所以在本例读取输出时(波及空格),要改用gets(p)函数,读取的字符串存入字符串指针p中。
2.输出的gets而不是gets_s
这是因为vs版本迭代的起因
3.用的0,而不是’ \0’
‘0’和‘\0’的区别。有一个共同点就是它们都是字符,'\0’代表的是空字符,而0代表一个ascll值,48,因而并非真正空。
真挚的心愿这篇博客能够帮忙到正好遇到这个问题的小伙伴们