1、给出的几个要处理的字符串没有重复性(子串),不必考虑某个单词是算在哪个种类中;
2、给出的几个要处理的字符串(除了“lol”)都是单词或短语,可以直接搜索
3、给出的处理长串没有前导空格也没有后导空格,不必考虑多余空格处理;
4、每一句是一行,不必考虑结束标志,直接用gets()接收输入的字符串,每次输入是一句。
5、没处理完一个“单词”,把搜索的起点移到该“单词”后面,继续搜索,直到搜索遇到字符串结束标志
A | Accepted | GNU C++ | 0 ms | 860 KB | [ 1211 B ] | 2013-09-29 09:40:56 |
#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;
}