《拼音字母》 蓝桥杯复试试题

题目描写叙述

【编程题】(满分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;
} 

题目中的样例执行通过。


posted @ 2017-05-25 15:29  cxchanpin  阅读(309)  评论(0编辑  收藏  举报