0
点赞
收藏
分享

微信扫一扫

CCF 字符串匹配



问题描述


试题编号:

201409-3

试题名称:

字符串匹配

时间限制:

1.0s

内存限制:

256.0MB

问题描述:

问题描述



  给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。



输入格式



  输入的第一行包含一个字符串S,由大小写英文字母组成。
  第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
  第三行包含一个整数n,表示给出的文字的行数。
  接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。



输出格式



  输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。



样例输入



Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello



样例输出



HelloWorld
HiHiHelloHiHi
HELLOisNOTHello



样例说明



  在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。



评测用例规模与约定



  1<=n<=100,每个字符串的长度不超过100。



AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
const int inf = 0x3f3f3f3f;//1061109567
typedef long long LL;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
char a[110],b[110],c[110];
bool judge1()
{
int len1 = strlen(a);
int len2 = strlen(b);
for(int i=0; i<len2; i++)
{
if(b[i] == a[0])
{
int k = i + 1;
int j;
for(j=1; j<len1; j++)
{
if(b[k] == a[j])
k++;
else
break;
}
if(j == len1)
return true;
}
}
return false;
}
bool judge2()
{
int len1 = strlen(a);
int len2 = strlen(b);
for(int i=0; i<len1; i++)
{
if(a[i] >= 'A' && a[i] <= 'Z')
a[i] = a[i]-'A'+'a';
else
a[i] = a[i];
}
for(int i=0; i<len2; i++)
{
if(b[i] >= 'A' && b[i] <= 'Z')
c[i] = b[i]-'A'+'a';
else
c[i] = b[i];
}
//c[len2] = '\0';这个加和不加是一个效果
for(int i=0; i<len2; i++)
{
if(c[i] == a[0])
{
int k = i + 1;
int j;
for(j=1; j<len1; j++)
{
if(c[k] == a[j])
k++;
else
break;
}
if(j == len1)
return true;
}
}
return false;
}
int main()
{
int flag,n;
scanf("%s",a);
scanf("%d",&flag);
scanf("%d",&n);
while(n--)
{
scanf("%s",b);
if(flag == 1 && judge1())
printf("%s\n",b);
else if(flag == 0 && judge2())
printf("%s\n",b);
}
return 0;
}



举报

相关推荐

0 条评论