关于hdu第2017个问题我有点疑惑想问一下大家
我写的代码如下:
- C/C++ code
#include<iostream>#include<cstdlib>#include<string>using namespace std;int main( void ){ char a[100]; int i,n; cin>>n; getchar(); for(i=0;i<n;i++) { int len=0; int count=0; gets(a); len=strlen(a); for( int j=0; j<len; j++ ) { if(a[j]>='0'&&a[j]<='9' ) count++; } cout<<count<<endl; } system("pause"); return 0;}我把题目也复制过来
Problem Description
对于给定的一个字符串,统计其中数字字符出现的次数。
Input
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
Output
对于每个测试实例,输出该串中数值的个数,每个输出占一行。
Sample Input
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
Sample Output
6
9
我知道在这是一个很水的问题,如果不用gets函数,换做scanf("%s",a);的话,就不用写那句getchar()了,可是如果用gets函数,不写那句getchar()的话,就会出错。错误的信息是当你输入n时,这里假如是输入2,(当然我试过了输入几都一样),当你按回车的时候会先自动输出一个0,然后等你输入字符串,而且这时输入一个字符串按回车,输出结果后就结束了,如果输入的是3回车,也一样会先输出一个0,然后可以再输入两个字符串就结束了。我尝试加了一个getchar();可以成功,但是我不知道为什么使用gets函数的时候,要加入这个getchar(),希望知道的能够帮我解答一下。
[解决办法]
【3】原型:char*gets(char*buffer);
【4】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
[解决办法]
ls大神的意思就是缓冲区没有清空…换行符被作为下一个字符串开始读取了…没有包含数字…自然输出0…
用scanf()输入会以空格分割字符串…可能也有偏差…