拼音魔法 使用switch case简化复杂的if else
A. 拼音魔法
原题链接
魔法学校小学一年级有一种题。就是给一个字的拼音,给一个声调,让你正确地注音。但魔法老师给了巨量的题,你不用魔法根本不可能做完。所以现在要让你发明一种魔法完成这个任务。
问题已经讲完了,下面开始教授汉语。(会汉语或者自认为会汉语的可以自动跳过)
汉语中一个字的拼音由声母和韵母两部分组成,在极少数情况下也会没有声母,但一定有韵母。
一般认为,声母有 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
第一行一个整数 。
下面 行,每行一个拼音:拼音声调在各个拼音之后,用数字 [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ǚ
注意两个点
汉语拼音不能用char数组存储
合理的拼音声调标注实际上有两种情况
1,只出现一次"aoeiuv" (ha,yi,gun)直接按次序标注 2,连续两个字符是"aoeiuv"(xia,xiaoxiv)声调必然落在一个上(按规则分类标注)
#include<bits/stdc++.h>
using namespace std;
string bucket[6][5]={{"a","ā","á","ǎ","à"},{"o","ō","ó","ǒ","ò"},{"e","ē","é","ě","è"},{"i","ī","í","ǐ","ì"},{"u","ū","ú","ǔ","ù"},{"ü","ǖ","ǘ","ǚ","ǜ"}};
void trans(string s)
{bool flag=1;int l=s[s.length()-1]-'0';if(l>0&&l<5){for(int i=0;i<s.length()-1;i++){if(flag){switch(s[i]){case 'a':flag=0;cout<<bucket[0][l];break;case 'o':flag=0;cout<<bucket[1][l];break;case 'e':flag=0;cout<<bucket[2][l];break;case 'i':flag=0;if(i!=s.length()-1&&(s[i+1]=='a'||s[i+1]=='o'||s[i+1]=='e'||s[i+1]=='u')){flag=1;cout<<'i';}elsecout<<bucket[3][l];break;case 'u':flag=0;if(i!=s.length()-1&&(s[i+1]=='a'||s[i+1]=='o'||s[i+1]=='e'||s[i+1]=='i')){flag=1;cout<<'u';}elsecout<<bucket[4][l];break;case 'v':flag=0;cout<<bucket[5][l];break;default:cout<<s[i];break;}}elsecout<<s[i];}return;}else{for(int i=0;i<s.length();i++){if(s[i]=='v')cout<<"ü";elsecout<<s[i];}return;}
}
int main()
{int n;cin>>n;string s;for(int i=1;i<=n;i++){cin>>s;cout<<"Case "<<i<<": ";trans(s);if(i<n)cout<<endl;}return 0;
}
拼音魔法 使用switch case简化复杂的if else相关推荐
- python中有没有switch_为什么python没有switch/case
为什么python没有switch/case 不同于其他编程语言,python中是没有switch/case 这种语法的,如果你是从其他语言转到python的,期初,对于没有switch/case 是 ...
- 拼音魔法-华东师范大学程序设计竞赛-ecnu3256
拼音魔法click here 模拟题,轻声判断v转换为u还是ü:1至4升是一样的解法.先判断有无a o e, 若有,替换为带声调的:若无,继续判断有无i u,若有,替换:若无,继续判断有无v,若有,替 ...
- EOJ 3256:拼音魔法
拼音魔法 Time limit per test: 1.0 seconds Time limit all tests: 1.0 seconds Memory limit: 256 megabytes ...
- 2017华东师范大学网赛-拼音魔法
拼音魔法 Time limit per test: 1.0 seconds Time limit all tests: 1.0 seconds Memory limit: 256 megabytes ...
- switch case语法
文章目录 switch case组合 不要拿青龙偃月刀去削苹果 case的作用是什么? break的作用是什么? case后面的值有什么要求吗? case语句的排列顺序问题 default语句相关问题 ...
- c#语言switch+case用法,C# switch case语句
C# switch case 语句也是条件语句的一种,与上一节介绍的<C# if else语句>是类似的,但在判断条件的选择上会有一些局限性. 具体的语法形式如下. switch(表达式) ...
- A. 拼音魔法(模拟)
摸了200+,丢人啊 A. 拼音魔法 Time limit per test: 1.0 seconds Time limit all tests: 1.0 seconds Memory limit: ...
- EOJ 3256 拼音魔法(string+char[]的使用技巧)
拼音魔法 Time limit per test: 1.0 seconds Time limit all tests: 1.0 seconds Memory limit: 256 megabytes ...
- C语言case次数有限制吗,用switch...case语句统计数字、空格和其他字符出现的次数...
//用switch...case语句统计数字.空格和其他字符出现的次数 //转自K&R #include int main(void) { int c, i, nwhite, nother, ...
最新文章
- DeepID2——强大的人脸分类算法
- 第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
- PHP代码审计笔记--变量覆盖漏洞
- linux 再多的running也挡不住锁
- Gompertz模型绘图 matlab,Logistic模型matlab求解
- Spring Boot文档阅读笔记-对Securing a Web Application解析
- 敏捷软件开发12条原则(译)
- C#自动属性及属性的简写形式
- 日常生活中使用计算机要注意事项有哪些,笔记本电脑日常使用注意事项以及保养技巧...
- 3乘3魔方第四步_三阶魔方第四步
- 数据结构课程设计项目2:校园导游咨询-预习报告
- 使用Seam-gen生成基础项目骨架
- 2015款Mac笔记本安装Windows10系统到外置移动硬盘教程
- Vue动态组件、组件缓存、组件激活和非激活、组件插槽、组件name
- Unrar解压缩.rar文件
- win10网络邻居看到linux,win10网络邻居找不到其他电脑怎么办
- 全国第一所蚂蚁链大学落地江西 2020区块链创新应用高峰论坛圆满落幕
- 有备无患!应届生CV算法岗面试指南
- 本地没有环境跑深度学习模型? 阿里云天池实验室它不香吗
- 怎么把模糊的照片变清晰?这篇文章告诉你