挖个坑,只写了一个中括号情况下的...
#include <cctype> #include <string> #include <vector> #include <iostream> using namespace std; string makeLower(string s){ for(int i =0;i<s.length();i++){ if(isupper(s[i])) s[i]+='a'-'A'; } return s; } bool isMatch(string s1,string s2){ s1 = makeLower(s1); s2 = makeLower(s2); if(s1 == s2)return 1; return 0; } int main() { int n;cin>>n; string temp; vector<string>v; while(n--){ cin>>temp; v.push_back(temp); } //输入目标匹配字符串 string target;cin>>target; vector<string>v_target; if(target.find(']')!=-1){//发现中括号 string left = target.substr(0,target.find('[')); string right = target.substr(target.find(']')+1,target.length()); //取得中括号内部部分 string inner = ""; for(int i = target.find('[')+1;i<target.find(']');i++){ inner.push_back(target[i]); } //组装部分串,传入vector for(int i =0;i<inner.length();i++){ string str = left; str.push_back(inner[i]); str+=right; v_target.push_back(str); } }else{//没有中括号 v_target.push_back(target); } for(int i =0;i<v.size();i++){ int count = 0; for(int j=0;j<v_target.size();j++){ if(isMatch(v[i],v_target[j])) count++; } //输出 if(count!=0) cout<<i+1<<" "<<v[i]<<endl; } } // 64 位输出请用 printf("%lld")