CCF-201409-3-字符串匹配
试题编号: | 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。
|
忽略大小写或者不忽略的匹配,大小写相差32。
源代码:
<span style="font-size:18px;">#include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; bool has_one(string s, string ss) { int flag=0; int len_s,len_ss; len_s=s.length(); len_ss=ss.length(); for(int i=0;i<=len_s-len_ss;i++) { int cnt=0; int temp=i; for(int j=0;j<len_ss;j++,temp++) { if(ss[j]==s[temp]) { cnt++; } } if(cnt==len_ss) { flag=1; } } return flag; } bool has_zero(string s, string ss) { int flag=0; int len_s,len_ss; len_s=s.length(); len_ss=ss.length(); for(int i=0;i<=len_s-len_ss;i++) { int cnt=0; int temp=i; for(int j=0;j<len_ss;j++,temp++) { if((ss[j]==s[temp])||(ss[j]-32==s[temp])||(ss[j]+32==s[temp])) { cnt++; } } if(cnt==len_ss) { flag=1; } } return flag; } int main() { int flag; int num; string s[105]; string substr; cin>>substr; cin>>flag; cin>>num; for(int i=0;i<num;i++) { cin>>s[i]; } for(int i=0;i<num;i++) { if(flag) { if(has_one(s[i],substr)) { cout<<s[i]<<endl; } } else { if(has_zero(s[i],substr)) { cout<<s[i]<<endl; } } } return 0; }</span>