先说一下第一次敲这个题目的想法,因为不熟悉gechar()的使用,所以构思先要求输入字符串长度n,然后输入字符串,将字符串存入事先定义好的一维数组中,然后写循环再对数组中字符进行判断,对库函数判断数字以及判断字母函数不熟悉,所以自行将判断写为根据ASCII码来判断。
可想而知的问题就是先行定义的数组定义多大,不论多大都不能保证一定符合输入要求,所以是较严重的问题。
后来了解后的另一个问题就是在刚开始的代码中,判断是否为字母时采用字母连续范围取值判断,就是对应字符c>=‘a’&&c<=='z’的方法进行判断,但是在其他系统中字母之间并非一定连续,所以可能会产生错误。
再有就是不调用库函数全部自己写代码过于繁琐,当然相比而言这个问题不算大
修正后代码
void CountStr()//定义函数名
{
char c;
int num = 0;//数字统计
int alpha = 0;//字母统计
int blank = 0;//空格统计
int other = 0;//其他统计
while((c=getchar()) != '\n')//从键盘获得字符,当回车时停止
{
if(isalpha(c))//使用库函数判断获得字母是否为字母、数字、空格、其他符号
{
alpha ++;//对应统计变量逐次加一
}
else if(isdigit(c))
{
num ++;
}
else if(c==' ')
{
blank ++;
}
else
{
other ++;
}
}
printf("数字:%d,字母:%d,空格:%d,其他符号:%d\n",num,alpha,blank,other);
}
在修改后的代码中
- 使用了库函数进行判断,代码简洁明了
- 变量命名更加规范一目了然
- 通过getchar()函数在循环内,对键盘输入的字符一次判断,取消了一维数组的缺陷
- 对相应的库函数有所熟悉
对于上一篇学习总结,哈哈哈。第一次写,什么都没想,内容写完就直接发表,回头一看发现内容在代码块里,确实有些尴尬,看的时候还要横向拖动,麻烦的一P,所以很感兴趣的话可以看不然就别看了,就是个个人总结,没什么特殊,但还是跟点进来看的人道个歉,不好意思啦,今后会注意的😁在下边加一个自写的判断小写字母的函数
bool isalp(char c)
{
if(c >= 97&&c <= 122)
{
return 1;
}
else
return 0;
}
这次先到这儿,以后发的话就一个题目或者一个主题一篇
来源:CSDN
作者:Wavesgf
链接:https://blog.csdn.net/ccbbird/article/details/104777166