题目链接:点击打开链接
本题是对字符串的操作,处理字符串的前缀和后缀。
// source code of submission 840502, Zhongshan University Online Judge System
#include <iostream>
#include <string>
using namespace std;
string s1[5] = {"anti", "post", "pre", "re", "un"};
string s2[5] = {"er", "ing", "ize", "s", "tion"};
int is_prefix(string &s)//判断是哪种前缀,然后去除前缀词
{
for(int i = 0; i < 5; ++i)
{
if(s.size() > s1[i].size() && s.substr(0, s1[i].size()) == s1[i])
{
s.erase(0, s1[i].size());
return i;
}
}
return -1;
}
int is_suffix(string &s)//判断是哪种后缀,然后去除后缀词
{
for(int i = 0; i < 5; ++i)
{
if(s.size() > s2[i].size() && (s.substr(s.size()-s2[i].size(), s2[i].size()) == s2[i]))
{
s.erase(s.size()-s2[i].size(), s2[i].size());
return i;
}
}
return -1;
}
void prefix(int i, string &ans)
{
if(i == -1)
return;
if(i == 0)
ans.insert(0, "against ");
else if(i == 1)
ans.insert(0, "after ");
else if(i == 2)
ans.insert(0, "before ");
else if(i == 3)
ans.append(" again");
else
ans.insert(0, "not ");
}
void suffix(int i, string &ans)
{
if(i == -1)
return;
if(i == 0)
{
ans.insert(0, "one who ");
ans.append("s");
}
else if(i == 1)
{
ans.insert(0, "to actively ");
}
else if(i == 2)
ans.insert(0, "change into ");
else if(i == 3)
ans.insert(0, "multiple instances of ");
else
{
ans.insert(0, "the process of ");
ans.append("ing");
}
}
int main()
{
int t;
cin >> t;
while(t--)
{
string s;
string ans;
cin >> s;
int p1 = is_prefix(s);
int p2 = is_suffix(s);
ans = s;
suffix(p2, ans);
prefix(p1, ans);
cout << ans << endl;
}
return 0;
}