A
来源:互联网 发布:mud游戏编程 百度云 编辑:程序博客网 时间:2024/06/10 07:21
一个大模拟,这题,就是一开始的时候找到第一个单词可以作为开始,然后往下去找,如果没有了,就输出一下那个括号,还有个就是逗号也要隔开,最后的时候也要再检查一遍
这个题其实,有很多简单的方法,但是自己写搓了~~,
#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 longusing 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;}