EOJ 3256 拼音魔法

模拟。

有$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("\n");
		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("\n");
		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("\n");
		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("\n");
		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("\n");
		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("\n");
		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("\n");
		}
	}
	return 0;
}
posted @ 2017-05-14 09:21  Fighting_Heart  阅读(173)  评论(0编辑  收藏  举报