注:zzulioj前187题的答案上传到了github和gitee:github gitee
数数多少个整数
题目描述
小明的老师给小明出了一道题目:数数一篇文章出现了多少个数字,请你帮帮他吧。
输入
输入一个字符串,由空格、英文字母、数字组成,以回车结束,长度小于1000。
输出
输出整数个数(不是数字字符个数哦)。
样例输入 Copy
365grh 27ha578
样例输出 Copy
3
提示
注意:010是两个数字,0和10
正确解法:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
char c[1000];
gets(c);
int sum=0;
for(int i=0;i<(int)strlen(c);i++)
{
if(isalpha(c[i]!=0)||c[i]==' ')//如果是字母或空格,重新来(例如fsi fjs)
continue;
if(c[i]=='0')//如果是字母0则为一次计数(例如010)
{
sum++;
continue;
}
if(c[i]>48&&c[i]<58)//如果是除0以外的数字则
{
sum++;//不管后面是什么,都一定是一次计数
for(i++;i<(int)strlen(c);i++)
{
if(isalpha(c[i])!=0||c[i]==' ')//直到碰到字母或空格,本轮计数完毕
break;
}
}
}
printf("%d",sum);
return 0;
}
另外,我还有一种写法,跟上面的差不多(两种写法的判断末尾整数的方式不同),但结果是错的,我不知道哪里有问题,请教各位大佬
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
char c[1000];
gets(c);
int sum=0;
for(int i=0;i<(int)strlen(c);i++)
{
if(isalpha(c[i]!=0)||c[i]==' ')
continue;
if(c[i]=='0')
{
sum++;
continue;
}
if(c[i]>48&&c[i]<58)
{
for(i++;i<(int)strlen(c);i++)
{
if(isalpha(c[i])!=0||c[i]==' ')
{
sum++;
break;
}
}
}
}
if(c[strlen(c)-1]>48&&c[strlen(c)-1]<58)//如果末尾是除0以外的数字
sum++;
printf("%d",sum);
return 0;
}
这是oj给的错误提示