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 }