--------------------------------------------------------------------------------分割线-------------------------------------------------
string的find函数找不到返回string::npos;
#include <string> #include <iostream> #include <algorithm> using namespace std; typedef pair<char, char> PP; string str, s, t; PP ss[110]; int k, pos[100], j; bool vis[100]; PP get_c(char c) { for(int i = 0; i < s.size(); i++) if(ss[i].first == c) return ss[i]; } bool check() { for(int i = 0; i < s.size(); i++) pos[ss[i].first - '0'] = 1; for(int i = 'A' - '0'; i <= 'Z' - '0'; i++) if(pos[i] == 0) return false; return true; } int main() { cin >> s >> str >> t; for(int i = 0; i < s.size(); i++) { if(str.find(s[i]) == string::npos) { cout << "Failed" << endl;return 0; } if(vis[s[i] - '0']) { PP r = get_c(s[i]); if(r.second != str[i]) {cout <<"Failed"<<endl; return 0;} else ss[i] = {s[i], str[i]}; } else ss[i] = {s[i], str[i]}, vis[s[i] - '0'] = true, j++; } //直接j++计数就行,当然check函数也是对的 //if(!check()) {cout << "Failed" << endl;return 0;} if(j < 26) {cout << "Failed" << endl;return 0;} for(int i = 0; i < t.size(); i++) { PP r = get_c(t[i]); cout << r.second; } return 0; }完整代码:
#include <string> #include <iostream> #include <algorithm> using namespace std; typedef struct Node { char first, second; }PP; string str, s, t; PP ss[110]; int k, pos[100], j; bool vis[100]; PP get_c(char c) { for(int i = 0; i < s.size(); i++) if(ss[i].first == c) return ss[i]; } int Find(char c) { for(int i = 0; i < str.size(); i++) if(str[i] == c) return 1; return 0; } int main() { cin >> s >> str >> t; for(int i = 0; i < s.size(); i++) { if(!Find(s[i])) { cout << "Failed" << endl;return 0; } if(vis[s[i] - '0']) { PP r = get_c(s[i]); if(r.second != str[i]) {cout <<"Failed"<<endl; return 0;} else ss[i] = {s[i], str[i]}; } else ss[i] = {s[i], str[i]}, vis[s[i] - '0'] = true, j++; } if(j < 26) {cout << "Failed" << endl;return 0;} for(int i = 0; i < t.size(); i++) { PP r = get_c(t[i]); cout << r.second; } return 0; }