Abbreviation-----ACM ICPC 2016–2017, Northeastern European Regional Contest(字符串 模拟)

http://codeforces.com/gym/101190/attachments

题意:

第一位大写,剩下小写的不小于两位的单词,

连续若干(大于等于两个)这样的单词连续(用空格间隔)可以把他们的首写字母提出来再来个空格加个括号单词放括号里,其余不变,输出出来就行了

 

这字符串模拟乍一看挺简单的,坑也不少,细细体会吧QWQ

 

亮出丑爆的代码:

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int judge_xiao(char ch)
  5 {
  6     if(ch>='a'&&ch<='z') return 1;
  7     else return 0;
  8 }
  9 
 10 int judge_da(char ch)
 11 {
 12     if(ch>='A'&&ch<='Z') return 1;
 13     else return 0;
 14 }
 15 
 16 int len, i, curb, curc, j, k;
 17 int book[10005], book1[10005];
 18 char a[10005], b[10005][10005], c[10005][10005];
 19 
 20 int main()
 21 {
 22     freopen("abbreviation.in", "r", stdin);
 23     freopen("abbreviation.out", "w", stdout);
 24     while(gets(a))
 25     {
 26         memset(book, 0, sizeof(book));
 27         memset(book1, 0, sizeof(book1));
 28         len = strlen(a);
 29         curb = 0;
 30         curc = 0;
 31 
 32         for(i=0; i<len; i++)
 33         {
 34             j = 0;
 35             while((judge_xiao(a[i])||judge_da(a[i]))&&i<len)
 36             {
 37                 b[curb][j++] = a[i];
 38                 i++;
 39             }
 40             b[curb][j] = '\0';
 41             curb++;
 42             if(i<len)
 43             {
 44                 j = 0;
 45                 while((judge_xiao(a[i])==0&&judge_da(a[i])==0)&&i<len)
 46                 {
 47                     c[curc][j++] = a[i];
 48                     i++;
 49                 }
 50                 c[curc][j] = '\0';
 51                 curc++;
 52                 i--;
 53             }
 54 
 55         }
 56 
 57         for(i=0; i<curb; i++)
 58         {
 59             len = strlen(b[i]);
 60             if(judge_da(b[i][0])==0||len==1) continue;
 61             else
 62             {
 63                 j = 1;
 64                 while(judge_xiao(b[i][j])==1&&j<len)
 65                 {
 66                     j++;
 67                 }
 68                 if(j>=len) book[i] = 1;
 69             }
 70         }
 71 
 72         for(i=0; i<curc; i++)
 73         {
 74             if(strcmp(c[i], " ")==0) book1[i] = 1;
 75         }
 76 
 77 
 78         book1[curc] = 1;
 79         int num;
 80         for(i=0; i<curb; i++)
 81         {
 82             k = i;
 83             num = 0;
 84             while(book[k]==1&&k<curb)
 85             {
 86                 num++;
 87                 if(book1[k]==0) break;
 88                 k++;
 89             }
 90             if(book[k]==0||k>=curb) k--;
 91             if(num>1)
 92             {
 93                 for(j=i; j<=k; j++)
 94                 {
 95                     printf("%c", b[j][0]);
 96                 }
 97                 printf(" ");
 98                 printf("(");
 99                 for(j=i; j<=k; j++)
100                 {
101                     if(j==k) printf("%s)", b[j]);
102                     else printf("%s", b[j]);
103                     if(j<curc) printf("%s", c[j]);
104                 }
105                 i = k;
106             }
107             else
108             {
109                 printf("%s", b[i]);
110                 if(i<curc) printf("%s", c[i]);
111             }
112         }
113         printf("\n");
114     }
115     return 0;
116 }

 

转载于:https://www.cnblogs.com/0xiaoyu/p/11396643.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值