sicily 1252(Defining Moment)

 题目链接:点击打开链接

本题是对字符串的操作,处理字符串的前缀和后缀。

// 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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值