nefuoj-831:统计good

description


我们每天都面临着要学习大量的英文单词,但我最喜欢good这个词,这个词见到的越多,我的生活就越幸福和愉快!给你一些英文单词,你能统计出good有多少个吗?

input


输入数据的第1行一个N (1 < N < 100),代表输入的数据组数,然后有N 行,每行有很多个单词,单词之间用空格隔开;每行的长度不超过100.

output


对于每行数据,输出其中含good单词的个数。

sample_input


2
i am a good boy!
goof good good dood good

sample_output


1
3



题解:这是标准的水题,但不代表他不是一道好题,陈宇大大出的题,经过一段时间的学习,现在自己搞出了三种写法,思路有所不同,分别陈述咯;



code1:

#include
#include
#include
int main()
{
    char s[105];
    int n,i,len,j,k;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        gets(s);
        len=strlen(s);
        k=0;
        for(i=0;i<=len;i++)
        {
            if(i==0&&s[i]=='g'&&s[i+1]=='o'&&s[i+2]=='o'&&s[i+3]=='d'&&(s[i+4]==' '||s[i+4]=='\0'))
            k++;
            if(i!=0&&s[i-1]==' '&&s[i+1]=='o'&&s[i+2]=='o'&&s[i+3]=='d'&&(s[i+4]==' '||s[i+4]=='\0'))
            k++;
        }
        printf("%d\n",k);


    }
    return 0;
}



笔记:这个方法的思路就是数空格,good前后都是空格才能算是一个good;但是这个代码不严谨,题目数据不严所以过了,而且代码冗长,不推荐哦~十一月份写的,刚刚接触编程,写成这样我也算是满意了;



code2:

#include
#include
#include
using namespace std;


int main()
{
    int n;
    char s[1005];
    cin>>n;
    while(n--)
    {
        int num=0;
        char c;
        while(~scanf("%s",s))
        {
            if(strcmp(s,"good")==0)
            num++;
            c=getchar();
            if(c=='\n') break;
        }
        cout<     }
    return 0;
}



笔记:这个方法比起来就好多了,用的是scanf来进行输入,但是依旧不严谨,因为最后一个“good!”的话它是不算做good的,但是依旧能过;



code3:

#include
#include
#include
using namespace std;

int main()
{
    int n;
    string s;
    string in;
    cin>>n;
    cin.get();
    while(n--)
    {
        getline(cin,in);
        int len=in.size();
        for(int i=0; i         {
            if(!isalpha(in[i]))
            in[i]=' ';
        }
        stringstream ss(in);
        int ans=0;
        while(ss >> s)
        {
            //cout<             if(s=="good")
            ans++;
        }
        cout<     }
    return 0;
}


笔记:这个代码就高端一点了(其实也没高端到哪去),利用循环将不是字母的都转化为空格,再利用sstream将字符串in放入一个新的流中,不断地进行输入循环,因为在“ss >> s”的循环过程中空格是作为分隔符的,所以标点符号也都转变为了分隔符,good!转变成了good(空格),不会出现数据的错误。三个代码里,只有这个是完全正确的,就算放在hdu也是会ac的啦~相信我;


总结:sstream用来分隔单词简直就是神器,将标点符号转化为空格才是符合社会主义价值观的进行分割前的行为;


你可能感兴趣的:(NEFUOJ)