题目描述
给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入
输入的第一行包含一个字符串S,由大小写英文字母组成。
第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
第三行包含一个整数n,表示给出的文字的行数。
接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。
输出
输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。
样例输入
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
样例输出
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello
#include<iostream>
#include<string.h>
using namespace std;
int sign;
int fun(char T[],char S[],int tlength,int slength,int pos)
{
int j=0,i=pos;
while(i<tlength&&j<slength)
{ if(sign==1)
{
if(T[i]==S[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j = 0;
}
}
else
{
if(S[i]>='A'&&S[i]<='Z')
S[i]=S[i]+32;
if(T[i]==S[j]||T[i]==S[j]-32)
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
}
return j==slength?i-slength:-1;
}
int main()
{
int i,n,h;
char s1[105],s[105][105];
cin>>s1>>sign>>n;
for(i=0;i<n;i++)
cin>>s[i];
for(i=0;i<n;i++)
{
h=fun(s[i],s1,strlen(s[i]),strlen(s1),0);
if(h!=-1)cout<<s[i]<<endl;
}
return 0;
}