《拼音字母》 蓝桥杯复试试题
题目描写叙述
【编程题】(满分19分)
在非常多软件中。输入拼音的首写字母就能够高速定位到某个词条。比方。在铁路售票软件中,输入: “bj”就能够定位到“北京”。
如何在自己的软件中实现这个功能呢?问题的关键在于:对每一个汉字必须能计算出它的拼音首字母。
GB2312汉字编码方式中,一级汉字的3755个是依照拼音顺序排列的。
我们能够利用这个特征。对经常使用汉字求拼音首字母。
GB2312编码方案对每一个汉字採用两个字节表示。
第一个字节为区号。第二个字节为区中的偏移号。为了能与已有的ASCII编码兼容(中西文混排),区号和偏移编号都从0xA1開始。
我们仅仅要找到拼音a,b,c,...x,y,z 每一个字母所相应的GB2312编码的第一个汉字,就能够定位全部一级汉字的拼音首字母了(不考虑多音字的情况)。
以下这个表给出了前述信息。
请你利用该表编敲代码。求出经常使用汉字的拼音首字母。
a 啊 B0A1
b 芭 B0C5
c 擦 B2C1
d 搭 B4EE
e 蛾 B6EA
f 发 B7A2
g 噶 B8C1
h 哈 B9FE
j 击 BBF7
k 喀 BFA6
l 垃 C0AC
m 妈 C2E8
n 拿 C4C3
o 哦 C5B6
p 啪 C5BE
q 期 C6DA
r 然 C8BB
s 撒 C8F6
t 塌 CBFA
w 挖 CDDA
x 昔 CEF4
y 压 D1B9
z 匝 D4D1
【输入、输出格式要求】
用户先输入一个整数n (n<100),表示接下来将有n行文本。接着输入n行中文串(每一个串不超过50个汉字)。
程序则输出n行。每行内容为用户输入的相应行的汉字的拼音首字母。
字母间不留空格。所有使用大写字母。
比如:
用户输入:
3
大家爱科学
北京天安门广场
软件大赛
则程序输出:
DJAKX
BJTAMGC
RJDS
【注意】
请细致调试!
您的程序仅仅有能执行出正确结果的时候才有机会得分!
在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。
请把全部函数写在同一个文件里,调试好后,复制到【考生目录】下相应题号的“解答.txt”中就可以。
相关的project文件不要拷入。
源码中不能使用诸如画图、Win32API、中断调用、硬件操作或与操作系统相关的API。
同意使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。
比如,不能使用CString类型(属于MFC类库),不能使用randomize, random函数(不属于ANSI C++标准)
思路分析
使用C++中的string来解决该问题。
首先建立一个二维数组,用来作为比較的标准:
a[2][23]={{"A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "W", "X", "Y", "Z"}, {"啊","芭","擦","搭","蛾","发","噶","哈","击","喀","垃","妈","拿","哦","啪","期","然","撒","塌","挖","昔","压","匝"}};
将每行输入的句子存储到一个string中,然后再进行字符串切割,得到每个文字。然后将得到的该文字与数组中的文字逐个比对,得到相应的英文字母。
编写代码
/*Copy Right By qianshou: http://blog.csdn.net/qsyzb*/ #include<iostream> #include<cstring> using namespace std; string a[2][23]={{"A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "W", "X", "Y", "Z"}, {"啊","芭","擦","搭","蛾","发","噶","哈","击","喀","垃","妈","拿","哦","啪","期","然","撒","塌","挖","昔","压","匝"}}; string search(string &temp) { for(int i=1;i<24;i++) { if(temp>a[1][i-1])continue; else return a[0][i-2]; } } string fun(string &str) { int len = str.length(); string result = ""; for(int i=0;i<len;i+=2) { string temp = str.substr(i,2); result += search(temp); } return result; } int main() { int n; string str; cin>>n; for(int i=0;i<n;i++) { cin>>str; cout<<fun(str)<<endl; } return 0; }
题目中的样例执行通过。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步