//類比題,遞迴處理即可,利用string 類強大的可+性,可簡單實現遞迴函式<br />//一開始調用了STL的string類的substr函數,結果restric function了<br />//真是無語。。。<br />#include<iostream><br />#include<string><br />using namespace std;<br />string Substr(string word,int position,int len)<br />{<br />string substr;<br />for(int i = position;i - position < len;++i)<br />{<br />if(i == word.size())break;<br />substr.push_back(word[i]);<br />}<br />return substr;<br />}<br />string findPrefix(string word)//找首碼<br />{<br />string Empty;<br />if(Substr(word,0,2) == "re")return "re";<br />else if(Substr(word,0,2) == "un")return "un";<br />else if(Substr(word,0,3) == "pre")return "pre";<br />else if(Substr(word,0,4) == "anti")return "anti";<br />else if(Substr(word,0,4) == "post")return "post";<br />else return Empty;<br />}<br />string findSuffix(string word)//找尾碼<br />{<br />string Empty;<br />int len = word.size();<br />if(Substr(word,len - 1,1) == "s")return "s";<br />else if(Substr(word,len - 2,2) == "er")return "er";<br />else if(Substr(word,len - 3,3) == "ize")return "ize";<br />else if(Substr(word,len - 3,3) == "ing")return "ing";<br />else if(Substr(word,len - 4,4) == "tion")return "tion";<br />else return Empty;<br />}</p><p>string findMiddle(string word)//找中間<br />{<br />string prefix = findPrefix(word);<br />string suffix = findSuffix(word);<br />string middle;<br />for(int i = prefix.size();i < word.size() - suffix.size();++i)<br />middle.push_back(word[i]);<br />return middle;<br />}<br />string postMeaning(string prefix,string middle,string suffix)<br />{<br />if(suffix == "er")<br />return "one who " + middle + "s";<br />else if(suffix == "ing")<br />return "to actively " + middle;<br />else if(suffix == "ize")<br />return "change into " + middle;<br />else if(suffix == "s")<br />return "multiple instances of " + middle;<br />else if(suffix == "tion")<br />return "the process of " + middle + "ing";<br />else return middle;<br />}<br />string preMeaning(string prefix,string middle,string suffix)<br />{<br />if(prefix == "anti")<br />return "against " + postMeaning(prefix,middle,suffix);<br />else if(prefix == "post")<br />return "after " + postMeaning(prefix,middle,suffix);<br />else if(prefix == "pre")<br />return "before " + postMeaning(prefix,middle,suffix);<br />else if(prefix == "re")<br />return postMeaning(prefix,middle,suffix) + " again";<br />else if(prefix == "un")<br />return "not " + postMeaning(prefix,middle,suffix);<br />else return postMeaning(prefix,middle,suffix);<br />}<br />int main()<br />{</p><p>//freopen("in.txt","r",stdin);<br />string str;<br />int n;<br />cin >> n;<br />while(n--)<br />{<br />cin >> str;<br />string prefix = findPrefix(str);<br />string suffix = findSuffix(str);<br />string middle = findMiddle(str);<br />cout << preMeaning(prefix,middle,suffix) << endl;<br />}<br />return 0;<br />}