#include <iostream>#include <string>#include <vector> using namespace std; int main() { int n; while(cin>>n) { vector<string> vec; string input; int i ...
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
int n;
while(cin>>n) {
vector<string> vec;
string input;
int i, j, k;
// 將n個字元串保存在vec中
for(i=0; i<n; i++) {
cin>>input;
vec.push_back(input);
}
// 匹配字元串保存在match中
string match;
cin>>match;
// 將字元串match轉換為字元數組m[]
const char *m;
m = match.c_str();
int x, y; // x和y記錄[和]的位置
for(i=0; i<match.size(); i++) {
if(m[i] == '[') {
x = i;
continue;
}
if(m[i] == ']') {
y = i;
break;
}
}
for(k=0; k<n; k++) { // 分別匹配n個字元串
// 將需要匹配的字元串轉換成字元數組q[]
const char *q;
q = vec[k].c_str();
j = 0; // 對於每一個匹配字元串,j都從0開始
int flag = 0; // 進入[]範圍內,flag=1
int mon = 0; // match,mon=1; not match,mon=0
for(i=0; i<vec[k].size(); i++) {
if(flag == 1 && j == y) {
continue;
}
// 如果q[i]是小寫字母
if((int)q[i]>=97 && (int)q[i]<=122) {
// 當沒有匹配到'['時
if(flag == 0) {
// 如果這個字元匹配上了
if((int)q[i] == (int)m[j] || (int)q[i]-32 == (int)m[j]) {
mon = 1;
j++;
// 判斷此時m[j]是否為'['
if(m[j] == '[') {
flag = 1;
j++;
}
continue;
}
// 如果這個字元沒有匹配上
else {
mon = 0;
break;
}
}
else { // 在[]中匹配某一個字元
if((int)q[i] == (int)m[j] || (int)q[i]-32 == (int)m[j]) {
flag = 0;
j = y + 1;
continue;
}
else {
flag = 1;
j++;
i--;
continue;
}
}
}
// 如果q[i]是大寫字母
else if((int)q[i]>=65 && (int)q[i]<=90) {
// 當沒有匹配到'['時
if(flag == 0) {
// 如果這個字元匹配上了
if((int)q[i] == (int)m[j] || (int)q[i]+32 == (int)m[j]) {
mon = 1;
j++;
// 判斷此時m[j]是否為'['
if(m[j] == '[') {
flag = 1;
j++;
}
continue;
}
// 如果這個字元沒有匹配上
else {
mon = 0;
break;
}
}
else { // 在[]中匹配某一個字元
if((int)q[i] == (int)m[j] || (int)q[i]+32 == (int)m[j]) {
flag = 0;
j = y + 1;
continue;
}
else {
flag = 1;
j++;
i--;
continue;
}
}
}
// 如果q[i]既不是小寫字母,也不是大寫字母
else {
// 當沒有匹配到'['時
if(flag == 0) {
// 如果這個字元匹配上了
if((int)q[i] == (int)m[j]) {
mon = 1;
j++;
// 判斷此時m[j]是否為'['
if(m[j] == '[') {
flag = 1;
j++;
}
continue;
}
// 如果這個字元沒有匹配上
else {
mon = 0;
break;
}
}
else { // 在[]中匹配某一個字元
if((int)q[i] == (int)m[j]) {
flag = 0;
j = y + 1;
continue;
}
else {
flag = 1;
j++;
i--;
continue;
}
}
}
}
// 如果自始至終這個字元串都匹配上了,mon=1
if(mon == 1 && j == match.size()) {
cout<<k+1<<" ";
for(i=0; i<vec[k].size(); i++) {
cout<<q[i];
}
cout<<endl;
}
}
}
return 0;
}