对于给定的一个字符串,统计其中数字字符出现的次数。
2 asdfasdf123123asdfasdf asdf111111111asdfasdfasdf
6 9
我的代码:
帝的代码:
#include <stdio.h>
int main()
{
int n;
char a[100];
while (scanf("%d",&n)!=EOF)
{
for(int j=0;j<n;j++)
{
int x=0;
scanf("%s",a);
for(int i=0;a[i]!='\0';i++)
{
if(a[i]<='9'&&a[i]>='0')x++;
}
printf("%d\n",x);
}
}
return 0;
}
我的代码会出现n=2,输入两组数据之后仍然可以输入数据的情况。这不是for循环中的n失效,这是由于读入失败,n没有变,后面的字符串仍在缓冲区。例如输入asss123,这个a是字符,n读取失败,故默认仍为上面输入的2,若输入2sasss,则会显示错误。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <deque>
#include <list>
#include <set>
#include <map>
#include <stack>
#include <queue>
using namespace std;
typedef long long LL;
int main(){
int n;
scanf("%d",&n);
while(n--){
char s[1000];
scanf("%s",s);
int num=0;
for(int i=0;s[i]!='\0';i++)
if(s[i]>='0'&&s[i]<='9')
num++;
printf("%d\n",num);
}
return 0;
}
这里使用n--更清晰明了,更简洁。n--表示先操作在自减,--n表示先自减再操作。