题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1982
题目思路:数字“1~26”转化为“A~Z”,‘#’转化为空格,‘-’忽略
这道题重点就在于数字转化为字母的过程。可以通过映射,用一个string保存字母
string str="AABCDEFGHIJKLMNOPQRSTUVWXYZ"
因为数字0不要转化为什么字母,所有随便定义了str[0]='A'
数字又要分成单个字符的数字和占两个字符的数字,所以要判断一下来处理
详情请看代码:
#include <iostream>
#include <string>
using namespace std;
string str="AABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main()
{
int n,i,x;
string s,a;
cin>>n;
getchar();
while(n--)
{
getline(cin,s);
for(i=0;i<s.length();i++)
{
if(s[i]=='-')
continue;
if(s[i]=='#')
cout<<" ";
if(s[i]>='1'&&s[i]<='9'&&(s[i+1]=='#'||s[i+1]=='-'||s[i+1]=='\0'))
{
x=(s[i]-'0');//注:s[i]是数字字符,要转换为数字要减去0字符
cout<<str[x];//映射转换为字母字符
}
if(s[i]>='1'&&s[i]<='9'&&s[i+1]>='0'&&s[i+1]<='9')
{
x=(s[i]-'0')*10+(s[i+1]-'0');
cout<<str[x];
i++;
}
}
cout<<endl;
}
return 0;
}