A - Abbreviation Gym - 101190A

一个大模拟,这题,就是一开始的时候找到第一个单词可以作为开始,然后往下去找,如果没有了,就输出一下那个括号,还有个就是逗号也要隔开,最后的时候也要再检查一遍

这个题其实,有很多简单的方法,但是自己写搓了~~,

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <math.h>
#include <stack>
#include <utility>
#include <string>
#include <sstream>
#include <cstdlib>
#include <set>
#define LL long long
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 10000 + 10;
int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
string in,out,ss,ans1,ans2;
int flag1,flag2;
void init()
{
    flag1 = 0;
    flag2 = 0;
    ans1 = "";
    ans2 = "";
}
int main()
{
    freopen("abbreviation.in","r",stdin);
	freopen("abbreviation.out","w",stdout);
    while(getline(cin,in))
    {
        out = "";
        init();
        for(int i=0; i < in.size(); i++)
        {
            int j;
            int f1=0,f2=0;
            for(j=i; j<in.size(); j++)
            {
                if(('A' <= in[j] && in[j] <= 'Z') || ('a' <= in[j] && in[j] <= 'z'));
                else
                    break;
                ss += in[j];
                if((j == i) && ('A' <= in[j] && in[j] <= 'Z'))
                    f1=1;
                if((j != i) && ('A' <= in[j] && in[j] <= 'Z'))
                    f1=0;
                if(('a' <= in[j] && in[j] <= 'z'))
                    f2=1;
            }
            if(f1&&f2)
            {
                if(flag1 && flag2 == 0)
                    flag2=1;
                if(flag1 == 0)
                    flag1=1;
                ans1 += in[i];
                ans2 += ss + in[j];
            }
            else
            {
                if(flag2 == 0)
                {
                    out += ans2;
                    init();
                }
                if(flag2 == 1)
                {
                    out += ans1 + " ("+ans2.substr(0,ans2.size()-1)+")" + ans2[ans2.size()-1];
                    init();
                }
                out += ss;
                if(j != in.size())
                    out += in[j];
            }
            if(in[j] != ' ' && j != in.size())
            {
                if(flag2 == 0)
                {
                    out += ans2;
                    init();
                }
                if(flag2 == 1)
                {
                    out += ans1 + " ("+ans2.substr(0,ans2.size()-1)+")" + ans2[ans2.size()-1];
                    init();
                }
            }
            i = j;
            ss = "";
        }
        if(in[in.size()-1] == ' ')
        {
            if(flag2 == 0)
            {
                out += ans2;
                init();
            }

            if(flag2 == 1)
            {
                out += ans1 + " ("+ans2.substr(0,ans2.size()-1)+")" + ans2[ans2.size()-1];
                init();
            }
        }
        else
        {
            if(flag2 == 0)
            {
                out += ans2.substr(0,ans2.size()-1);
                init();
            }
            if(flag2 == 1)
            {
                out += ans1 + " (" + ans2.substr(0,ans2.size()-1) + ")";
                init();
            }
        }
        cout<<out<<endl;

    }
    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值