模拟。
有$a$先标$a$,其次是$o$和$e$,$o$和$e$在韵母中不会同时存在。最后是$u$和$i$,这两个字母在韵母中可能同时存在,标在后面的那个。输出那些字符的话直接输出就可以了。
举几个例子:
3
shui2
Case 1: shuí
liu2
Case 2: liú
lve4
Case 3: lüè
#include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; char s[10000]; int T, len, cas = 1; int diao; void A() { if(diao==1) printf("ā"); if(diao==2) printf("á"); if(diao==3) printf("ǎ"); if(diao==4) printf("à"); } void E() { if(diao==1) printf("ē"); if(diao==2) printf("é"); if(diao==3) printf("ě"); if(diao==4) printf("è"); } void I() { if(diao==1) printf("ī"); if(diao==2) printf("í"); if(diao==3) printf("ǐ"); if(diao==4) printf("ì"); } void O() { if(diao==1) printf("ō"); if(diao==2) printf("ó"); if(diao==3) printf("ǒ"); if(diao==4) printf("ò"); } void U() { if(diao==1) printf("ū"); if(diao==2) printf("ú"); if(diao==3) printf("ǔ"); if(diao==4) printf("ù"); } void V() { if(diao==1) printf("ǖ"); if(diao==2) printf("ǘ"); if(diao==3) printf("ǚ"); if(diao==4) printf("ǜ"); } void work() { int f=0; for(int i=0;i<len-1;i++) if(s[i]=='a') f=1; if(f==1) { for(int i=0;i<len-1;i++) { if(s[i]=='a') A(); else { if(s[i]=='v') printf("ü"); else printf("%c",s[i]); } } printf(" "); return ; } for(int i=0;i<len-1;i++) if(s[i]=='e') f=1; if(f==1) { for(int i=0;i<len-1;i++) { if(s[i]=='e') E(); else { if(s[i]=='v') printf("ü"); else printf("%c",s[i]); } } printf(" "); return ; } for(int i=0;i<len-1;i++) if(s[i]=='o') f=1; if(f==1) { for(int i=0;i<len-1;i++) { if(s[i]=='o') O(); else { if(s[i]=='v') printf("ü"); else printf("%c",s[i]); } } printf(" "); return ; } for(int i=0;i<len-1;i++) if(s[i]=='v') f=1; if(f==1) { for(int i=0;i<len-1;i++) { if(s[i]=='v') V(); else printf("%c",s[i]); } printf(" "); return ; } for(int i=len-1;i>=0;i--) { if(s[i]=='i') { f=1; break; } if(s[i]=='u') { f=2; break; } } if(f==1) { for(int i=0;i<len-1;i++) { if(s[i]=='i') I(); else { if(s[i]=='v') printf("ü"); else printf("%c",s[i]); } } printf(" "); return ; } if(f==2) { for(int i=0;i<len-1;i++) { if(s[i]=='u') U(); else { if(s[i]=='v') printf("ü"); else printf("%c",s[i]); } } printf(" "); return ; } } int main() { scanf("%d",&T); while(T--) { scanf("%s",s); len = strlen(s); printf("Case %d: ",cas++); if(s[len-1]>='0'&&s[len-1]<='9') { diao = s[len-1]-'0'; work(); } else { for(int i=0;i<len;i++) { if(s[i]=='v') printf("ü"); else printf("%c",s[i]); } printf(" "); } } return 0; }