首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于hdu第2017个有关问题小弟我有点疑惑想问一上大家

2012-08-10 
关于hdu第2017个问题我有点疑惑想问一下大家我写的代码如下:C/C++ code#includeiostream#includecstdli

关于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()输入会以空格分割字符串…可能也有偏差…

热点排行