资源限制
时间限制: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。
**分析:**当第二位输入为1时候,检验后面字符串是否包含第一行输入字符串当输入为0时候,将字符串全部转换为小写字母组成的字符串,然后检验变换后后面字符串是否包含第一行变换后字符串。使用substr函数进行匹配判断。
**注意:**只要包含一个就输出,如果包含多个,也只输出一次。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cin>>s;
int p;
cin>>p;
int n;
cin>>n;
string g[n];
for(int i=0;i<n;i++)
cin>>g[i];
int num1=s.length();
for(int k=0;k<n;k++)
{
int num2=g[k].length();
if(p==1)
{
int m=0;
string as;
for(int i=0;i<=num2-num1;i++)
{
as=g[k].substr(i,num1);
if(as==s)
m++;
}
if(m!=0)
cout<<g[k]<<endl;
}
else
{
string bs1;
bs1=s;
string bs2;
bs2=g[k];
int n=0;
for(int i=0;i<num2;i++)
{
if(g[k][i]>='A'&&g[k][i]<='Z')
g[k][i]+=32;
}
for(int i=0;i<num1;i++)
{
if(s[i]>='A'&&s[i]<='Z')
s[i]+=32;
}
string as2;
for(int i=0;i<=num2-num1;i++)
{
as2=g[k].substr(i,num1);
if(as2==s)
n++;
}
if(n!=0)
cout<<bs2<<endl;
}
}
return 0;
}