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. ng-model值字符串转数值型(convertToNumber directive)

    <select ng-model="model.id" convert-to-number> <option value="0">Zer ...

  2. .NET 动态脚本语言

    Script.NET (S#) 是一种允许为你的应用程序自定义行为,与本地.NET对象.类型和组件交互动态的脚本语言.托管应用程序本身可以改变一个xml配置脚本运行时的默认行为,更换绑定的方法,属性, ...

  3. 工欲善其事,必先利其器之open live writer写作

    在博客园学习有一段时间,想想是不是自己也应该开始写点东西,做点总结,更加快速的提升自己. 查看小组/博客园使用帮助 得知目前windows live writer 已经停止更新并推荐安装 open l ...

  4. 用Atom打造简单的java编译器以及对于可能出现的问题解答

    如何用Atom打造简单的javaIDE 自己一直比较喜欢Atom编辑器,前段时间给Atom配置好了C/C++的运行环境,自己心里还是感觉挺好的,最近在学习java ,偶然的机会让我看到了一篇文章,就是 ...

  5. #define WIN32_LEAN_AND_MEAN

    不加载MFC所需的模块.用英语解释:Say no to MFC如果你的工程不使用MFC,就加上这句,这样一来在编译链接时,包括最后生成的一些供调试用的模块时,速度更快,容量更小.不过对于较大工程,MF ...

  6. 【小程序】微信小程序实现各种特效实例

    写在前面 最近在负责一个微信小程序的前端以及前后端接口的对接的项目,整体上所有页面的布局我都已经搭建完成,里面有一些常用的特效,总结一下,希望对大家和我都能有所帮助 实例1:滚动tab选项卡 先看一下 ...

  7. 分享基于分布式Http长连接框架

    第一次在博客园写文章,长期以来只是潜水中.本着不只索取,而要奉献的精神,随笔文章之. 现贡献一套长连接的框架.如下特性: 1:发布者可异步发送消息,消息如果发送失败,可重试发送,重试次数基于配置,消息 ...

  8. WPF DataGrid自动生成行号

      在使用WPF进行应用程序的开发时,经常会为DataGrid生成行号,这里主要介绍一下生成行号的方法.通常有三种方法,这里主要介绍其中的两种,另一种简单提一下. 1. 直接在LoadingRow事件 ...

  9. Echarts数据可视化series-effectscatter特效散点图,开发全解+完美注释

    全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...

  10. cocos2dx - android环境配置及编译

    接上一节内容:cocos2dx - 伤害实现 本节主要讲Android环境配置及编译 在第一节中setup.py的配置里,我们没有配置对应的ndk,sdk,ant的路径,在这里需要先配置好环境变量. ...