//模拟题,递归处理即可,利用string 类强大的可+性,可简单实现递归函数 //一开始调用了STL的string类的substr函数,结果restric function了 //真是无语。。。 #include<iostream> #include<string> using namespace std; string Substr(string word,int position,int len) { string substr; for(int i = position;i - position < len;++i) { if(i == word.size()) break; substr.push_back(word[i]); } return substr; } string findPrefix(string word)//找前缀 { string Empty; if(Substr(word,0,2) == "re") return "re"; else if(Substr(word,0,2) == "un") return "un"; else if(Substr(word,0,3) == "pre") return "pre"; else if(Substr(word,0,4) == "anti") return "anti"; else if(Substr(word,0,4) == "post") return "post"; else return Empty; } string findSuffix(string word)//找后缀 { string Empty; int len = word.size(); if(Substr(word,len - 1,1) == "s") return "s"; else if(Substr(word,len - 2,2) == "er") return "er"; else if(Substr(word,len - 3,3) == "ize") return "ize"; else if(Substr(word,len - 3,3) == "ing") return "ing"; else if(Substr(word,len - 4,4) == "tion") return "tion"; else return Empty; } string findMiddle(string word)//找中间 { string prefix = findPrefix(word); string suffix = findSuffix(word); string middle; for(int i = prefix.size();i < word.size() - suffix.size();++i) middle.push_back(word[i]); return middle; } string postMeaning(string prefix,string middle,string suffix) { if(suffix == "er") return "one who " + middle + "s"; else if(suffix == "ing") return "to actively " + middle; else if(suffix == "ize") return "change into " + middle; else if(suffix == "s") return "multiple instances of " + middle; else if(suffix == "tion") return "the process of " + middle + "ing"; else return middle; } string preMeaning(string prefix,string middle,string suffix) { if(prefix == "anti") return "against " + postMeaning(prefix,middle,suffix); else if(prefix == "post") return "after " + postMeaning(prefix,middle,suffix); else if(prefix == "pre") return "before " + postMeaning(prefix,middle,suffix); else if(prefix == "re") return postMeaning(prefix,middle,suffix) + " again"; else if(prefix == "un") return "not " + postMeaning(prefix,middle,suffix); else return postMeaning(prefix,middle,suffix); } int main() { //freopen("in.txt","r",stdin); string str; int n; cin >> n; while(n--) { cin >> str; string prefix = findPrefix(str); string suffix = findSuffix(str); string middle = findMiddle(str); cout << preMeaning(prefix,middle,suffix) << endl; } return 0; }