问题描述
给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入格式
输入的第一行包含一个字符串S,由大小写英文字母组成。
第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
第三行包含一个整数n,表示给出的文字的行数。
接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。
输出格式
输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。
样例输入
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
样例输出
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello
样例说明
在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。
评测用例规模与约定
1<=n<=100,每个字符串的长度不超过100。
自己解答
#include<iostream>
#include<vector>
using namespace std;
void test01(){
string a;//输入的匹配字符串
int b=0;//大小写开关
int c;//字符串数目
vector<string>d(c);//字符串数组
vector<string>d11(c);//字符串数组d的拷贝
cin>>a>>b>>c;
string e;
for(int i=0;i<c;i++){
cin>>e;
d[i]=e;
d11[i]=e;
}
vector<string>d1;//匹配好的字符串存起来cout
if(b==0){
//将a转换为小写
for(auto it=a.begin();it<a.end();it++){
if(*it>='A'&&*it<='Z'){
*it+=32;
}
}
;
//将string数组d转换为小写
for(int i=0;i<c;i++){
for(auto it=d[i].begin();it<d[i].end();it++){
if(*it>='A'&& *it<='Z'){
*it+=32;
}
}
}
for(auto it=d1.begin();it<d1.end();it++){
cout<<*it<<endl;
}
for(int i=0;i<c;i++){
//有匹配的话存入d1
auto index=d[i].find(a);
if(index!=string::npos){
d1.push_back(d11[i]);
}
//无匹配的话下一次循环
else{
continue;
}
}
}
//不忽略大小写
if(b==1){
for(int i=0;i<c;i++){
//有匹配的话存入d1
auto index=d[i].find(a);
if(index!=string::npos){
d1.push_back(d[i]);
}
//无匹配的话下一次循环
else{
continue;
}
}
}
for(auto it=d1.begin();it<d1.end();it++){
cout<<*it<<endl;
}
}
int main(){
test01();
return 0;
}
/*
Hello
0
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
*/