当前位置:编程学习 > C/C++ >>

Angry Grammar Nazi

Angry Grammar Nazi
 
1、给出的几个要处理的字符串没有重复性(子串),不必考虑某个单词是算在哪个种类中;
2、给出的几个要处理的字符串(除了“lol”)都是单词或短语,可以直接搜索
3、给出的处理长串没有前导空格也没有后导空格,不必考虑多余空格处理;
4、每一句是一行,不必考虑结束标志,直接用gets()接收输入的字符串,每次输入是一句。
5、没处理完一个“单词”,把搜索的起点移到该“单词”后面,继续搜索,直到搜索遇到字符串结束标志
 
20114045007 A Accepted GNU C++ 0 ms 860 KB [ 1211 B ] 2013-09-29 09:40:56
 
<span style="font-size:18px">#include<stdio.h>  
#include<string.h>  
int main()  
{  
    int t,sum;  
    char x[105],*i;  //存储输入输出的待处理的字符串  
    int j;  
    scanf("%d",&t);  
    getchar();  //t后面有个空格和回车,吸收空格,保证后面数据输入的正确性  
    while(t--)  
    {  
        sum=0;  
        x[0]=' ';  //串前加入前导空格  
        gets(x+1);  //输入待处理字符串  
        int strx=strlen(x);  
        x[strx]=' ';  //加入后导字符串  
        x[strx+1]='\0';   //添加结束标志,strstr()查找成功或遇字符串结束符,结束查找  
        i=x;  //从字符串开始位置开始处理  
        while(strstr(i," u "))   //处理字符串中单独的u的单词  
        {  
            sum++;  
            i=strstr(i," u ")+2;    //往后2个位置可以滤过该“单词”  
        }  
        i=x;  
        while(strstr(i," ur "))  
        {  
            sum++;  
            i=strstr(i," ur ")+3;  
        }  
        i=x;  
        while(strstr(i," would of "))  
        {  
            sum++;  
            i=strstr(i," would of ")+9;  
        }  
        i=x;  
        while(strstr(i," should of "))  
        {  
            sum++;  
            i=strstr(i," should of ")+10;  
        }  
        i=x;  
        while(strstr(i,"lol"))   //查找单词中有“lol”的单词,  
        //不管他有几个该子串,都只计算一次,只要确定单词中是否有该子串即可  
        //要是有的话,就计数,并跳过该单词  
        {  
            sum++;  //能找到子串,计数  
            i=strstr(strstr(i,"lol")," ");   //滤过该单词,把下次搜索起点移到该单词后面  
        }  
        printf("%d\n",sum*10);  //输出计数变量*10即可  
    }  
    return 0;  
}  
</span>  

 


补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,