• 【模拟】Gym


    让你把所有的“连续的仅有首字母大写的”词组用缩写表示,并且在后面用括号注明原词组。

    #include<cstdio>
    #include<cstring>
    using namespace std;
    char s[130];
    bool iszimu(char c){
    	return ((c>='A' && c<='Z') || (c>='a' && c<='z'));
    }
    bool isbig(char c){
    	return (c>='A' && c<='Z');
    }
    bool issmall(char c){
    	return (c>='a' && c<='z');
    }
    bool check(int l,int r){
    	if(r-l+1==1){
    		return 0;
    	}
    	if(!isbig(s[l])){
    		return 0;
    	}
    	for(int i=l+1;i<=r;++i){
    		if(!issmall(s[i])){
    			return 0;
    		}
    	}
    	return 1;
    }
    void print(int l,int r){
    	for(int i=l;i<=r;++i){
    		putchar(s[i]);
    	}
    }
    void prin2(int l,int r){
    	for(int i=l;i<=r;++i){
    		if(isbig(s[i])){
    			putchar(s[i]);
    		}
    	}
    	printf(" (");
    	for(int i=l;i<=r;++i){
    		putchar(s[i]);
    	}
    	putchar(')');
    }
    int main(){
    	freopen("abbreviation.in","r",stdin);
    	freopen("abbreviation.out","w",stdout);
    	while(gets(s)){
    		int n=strlen(s),sta,cnt=0,end=-1,Sta,End=-1;
    		for(int i=0;i<n;++i){
    			if((i==0 || !iszimu(s[i-1])) && iszimu(s[i])){
    				sta=i;
    			}
    			if((i==n-1 || !iszimu(s[i+1])) && iszimu(s[i])){
    				if(check(sta,i) && (cnt==0 || (end==sta-2 && s[end+1]==' '))){
    					++cnt;
    					if(cnt==1){
    						Sta=sta;
    						End=end;
    					}
    				}
    				else if(check(sta,i)){
    					if(cnt>=2){
    						print(End+1,Sta-1);
    						prin2(Sta,end);
    					}
    					else if(cnt==1){
    						print(End+1,Sta-1);
    						print(Sta,end);
    					}
    					cnt=1;
    					Sta=sta;
    					End=end;
    				}
    				else{
    					if(cnt>=2){
    						print(End+1,Sta-1);
    						prin2(Sta,end);
    					}
    					else if(cnt==1){
    						print(End+1,Sta-1);
    						print(Sta,end);
    					}
    					print(end+1,i);
    					cnt=0;
    				}
    				end=i;
    			}
    		}
    		if(cnt>=2){
    			print(End+1,Sta-1);
    			prin2(Sta,end);
    		}
    		else if(cnt==1){
    			print(End+1,Sta-1);
    			print(Sta,end);
    		}
    		print(end+1,n-1);
    		puts("");
    	}
    	return 0;
    }
  • 相关阅读:
    HTTP协议详解(转)
    Linux shell 提取文件名和目录名的一些方法(转)
    快速建立ssh互信(转)
    Python 连接mysql
    pt-online-schema-change原理解析(转)
    python基础学习笔记3
    python基础学习笔记2
    DNS服务器原理
    代理服务器(Proxy)原理
    Ext.MessageBox消息框
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7163361.html
Copyright © 2020-2023  润新知