A. 拼音魔法

Time limit per test: 1.0 seconds

Time limit all tests: 1.0 seconds

Memory limit: 256 megabytes

Accept / Submit: 341 / 2134

魔法学校小学一年级有一种题。就是给一个字的拼音,给一个声调,让你正确地注音。但魔法老师给了巨量的题,你不用魔法根本不可能做完。所以现在要让你发明一种魔法完成这个任务。

问题已经讲完了,下面开始教授汉语。(会汉语或者自认为会汉语的可以自动跳过)

汉语中一个字的拼音由声母和韵母两部分组成,在极少数情况下也会没有声母,但一定有韵母。

一般认为,声母有 b, p, m, f, d, t, l, n, g, k, h, j, q, x, z, c, s, zh, ch, sh, r, y, w;韵母有:a, e, o, i, u, ü, ai, ei, ui, ao, ou, iu, ie, üe, er, an, en, in, un, ün, ang, eng, ing, ong。

不是所有的字母都能组合的,组合的时候有时会发生一些神奇的事情,例如 üe 变成了 ue。但是标调规则有如下口诀:

有 a 先找 a,没 a 找 o e,i u 并排标在后,这样标调不会错。

只有下面列出的元素可能会被标调。请按照下表输出(尤其注意 a 不要输出成 ɑ 了):

  • 第一声:ā ē ī ō ū ǖ。
  • 第二声:á é í ó ú ǘ。
  • 第三声:ǎ ě ǐ ǒ ǔ ǚ。
  • 第四声:à è ì ò ù ǜ。
  • 轻声:a e i o u ü。

辅助材料:由教育部公布的拼音方案。如果有描述不一致的地方,请以本题描述为准。

Input

第一行一个整数 T (1≤T≤105)。

下面 T 行,每行一个拼音:拼音声调在各个拼音之后,用数字 [1-4] 进行表示。例如 zhong1 guo2。没有数字的说明是轻声,不用标调。

按照国际惯例,输入文件全部由 ASCII 编码组成。ü 用 v 来代替。但在输出中,应仍然用 ü 来表示。

Output

对于每一组数据,输出 Case x: y。其中 x 是从 1 开始的测试数据编号,y 是一个拼音标调后的答案。

注意:对于非 ASCII 字符的输出,请使用 UTF-8 编码。

Examples

input
5
zhong1
guo2
me
que1
nv3
output
Case 1: zhōng
Case 2: guó
Case 3: me
Case 4: quē
Case 5: nǚ

Note

会 C/C++ 的魔法师最可爱了。

/*
* @Author: lyucheng
* @Date: 2017-05-12 18:42:32
* @Last Modified by: lyucheng
* @Last Modified time: 2017-05-12 21:37:29
*/ #include <bits/stdc++.h>
using namespace std;
string str;
int t;
string tr(char x,int n){
if(x=='a'){
if(n==){
return "ā";
}else if(n==){
return "á";
}else if(n==){
return "ǎ";
}else if(n==){
return "à";
}
}else if(x=='e'){
if(n==){
return "ē";
}else if(n==){
return "é";
}else if(n==){
return "ě";
}else if(n==){
return "è";
}
}else if(x=='i'){
if(n==){
return "ī";
}else if(n==){
return "í";
}else if(n==){
return "ǐ";
}else if(n==){
return "ì";
}
}else if(x=='o'){
if(n==){
return "ō";
}else if(n==){
return "ó";
}else if(n==){
return "ǒ";
}else if(n==){
return "ò";
}
}else if(x=='u'){
if(n==){
return "ū";
}else if(n==){
return "ú";
}else if(n==){
return "ǔ";
}else if(n==){
return "ù";
}
}else if(x=='v'){
if(n==){
return "ǖ";
}else if(n==){
return "ǘ";
}else if(n==){
return "ǚ";
}else if(n==){
return "ǜ";
}
}
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d",&t);
for(int ca=;ca<=t;ca++){
printf("Case %d: ",ca);
cin>>str;
string s="";
int n=str.size();
int op=str[n-]-''; //是不是摘帽子
bool ft=false;
for(int i=;i<n;i++){
if(str[i]=='y'||str[i]=='j'||str[i]=='q'||str[i]=='x'||str[i]=='e'){
ft=true;
break;
}
}
for(int i=;i<n;i++){
if(str[i]=='v'){
if(ft==true)
str[i]='u';
}
} //如果最后一位有整数
if(op>=&&op<=){
bool flag=false;
//先找a
s="";
for(int i=;i<n;i++){
if(str[i]=='a'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
flag=true;
break;
}
}
if(flag==true){
cout<<str<<endl;
continue;
} //再找o e
s="";
for(int i=;i<n;i++){
if(str[i]=='o'||str[i]=='e'){
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
if(flag==true){
cout<<str<<endl;
continue;
} //然后找 u i
bool f1=false;
bool f2=false;
for(int i=;i<n;i++){
if(str[i]=='i') f1=true;
if(str[i]=='u'||str[i]=='v') f2=true;
}
//如果是并存的
if(f1==true&&f2==true){
for(int i=;i<n;i++){
if(str[i]=='i'||str[i]=='u'||str[i]=='v'){
//加后边那一个
if(f1==true){
f1=false;
continue;
}
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else if(str[i]=='u'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
}else{
//否则的话就加第一个
for(int i=;i<n;i++){
if(str[i]=='i'||str[i]=='u'||str[i]=='v'){
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else if(str[i]=='u'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
}
cout<<str<<endl;
}else{
cout<<str<<endl;
}
}
return ;
}

A. 拼音魔法的更多相关文章

  1. EOJ 3256 拼音魔法

    模拟. 有$a$先标$a$,其次是$o$和$e$,$o$和$e$在韵母中不会同时存在.最后是$u$和$i$,这两个字母在韵母中可能同时存在,标在后面的那个.输出那些字符的话直接输出就可以了. 举几个例 ...

  2. 隐马尔科夫模型python实现简单拼音输入法

    在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...

  3. iOS 汉字的拼音

    获取汉字的拼音 #import <Foundation/Foundation.h> @interface NSString (Utils) /** * 汉字的拼音 * * @return ...

  4. Oracle汉字转拼音package

    --函数GetHzFullPY(string)用于获取汉字字符串的拼音 --select GetHzFullPY('中华人民共和国') from dual; --返回:ZhongHuaRenMinGo ...

  5. Ubuntu 下ibus拼音输入法启用 (ubuntu 16.04

    Ubuntu 下ibus拼音输入法启用 我安装的是英文版的ubuntu 16.04,打开只带英文,并没有中文. 设置输入法为iBus 从system settings 进入language suppo ...

  6. JavaScript 汉字与拼音互转终极方案 附JS拼音输入法

    转:http://www.codeceo.com/article/javascript-pinyin.html 前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的 ...

  7. lumia手机wp系统应用列表如何设置按照拼音

    1.安装应用多了就会这样·· 2.想用拼音排列,请把系统设置里的区域语言中的区域和格式改为中国,此时,屏幕壁纸上是"四月十五日". 3.想用笔画排列,请把系统设置里的区域语言中的区 ...

  8. SQL汉字转拼音函数-支持首字母、全拼

    SQL汉字转拼音函数-支持首字母.全拼 FROM :http://my.oschina.net/ind/blog/191659 作者不详 --方法一sqlserver汉字转拼音首字母 --调用方法 s ...

  9. Mono 3.2 测试NPinyin 中文转换拼音代码

    C#中文转换为拼音NPinyin代码  在Mono 3.2下运行正常,Spacebuilder 有使用到NPinyin组件,代码兼容性没有问题. using System; using System. ...

随机推荐

  1. iOS开发中KVC、KVO简介

    在iOS开发中,KVC和KVO是经常被用到的.可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化.简单介绍一下KVC和KVO. 一:键值编码(KVC) KVC,全称 ...

  2. ASP.NET Core 2.0 使用支付宝PC网站支付

    前言 最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的 ...

  3. notepad的快捷操作-代码速写

    (一)先安装zencode插件 (二)运用插件 第一步:键入:html:xt 再Ctrl+Alt+Enter键 得到 <!DOCTYPE html PUBLIC "-//W3C//DT ...

  4. 51 nod 1097 拼成最小的数 思路:字符串排序

    题目: 思路:1.以字符串输入这些整数. 2.对这些字符串排序,排序规则为尽量让能让结果变小的靠前. 代码中有注释,不懂的欢迎在博客中评论问我. 代码: #include <bits\stdc+ ...

  5. web版的tty

      1.wetty Wetty是使用Node.js和websockets开发的一个开源`Web-based SSH` 2.环境配置 2.1.配置epel源 [epel] name=epel baseu ...

  6. NOIP2017SummerTraining0712

    个人感受:打了三个小时不到的第一题,然后也就没有多少时间去搞第二题了,特别是第二题还看到了期望这样的东西,这个难以理解,第三题的树分治,myx大佬说50分好拿,但是我觉得也挺难拿的. 单词检索 时间限 ...

  7. .Net 内存对象分析

    在生产环境中,通过运行日志我们会发现一些异常问题,此时,我们不能直接拿VS远程到服务器上调试,同时日志输出的信息无法百分百反映内存中对象的状态,比如说我们想查看进程中所有的Socket连接状态.服务路 ...

  8. http://codeforces.com/contest/828

    哇这是我打的第一场cf,第一题都wa了无数次,然后第二题差几分钟交 ,第二天一交就AC了内心是崩溃的.果然我还是太菜l.... A. Restaurant Tables time limit per ...

  9. 使用wsimport和JAX-WS调用Web Service接口

    本文简单举例说明如何使用wsimport工具和JAX-WS API调用Web Service接口.此方法的优点:使用JDK自带的工具和API接口,无需依赖第三方库. JDK版本:1.8.0_141开发 ...

  10. FPGA在AD采集中的应用

    AD转换,也叫模数转换,是将模拟信号转换为数字信号.目前包括电脑CPU,ARM,FPGA,处理的信号都只能是数字信号,所以数据信号在进入处理芯片前必须要进行AD转换. 在高速的AD转换中,FPGA以其 ...