Hnu.cg程序设计训练3.6字符串数字置换
【问题描述】
从键盘接收用户输入的字符串, 对用户输入的每个字符串的处理是:将字符串内的每一个十进制数字字符置换成下列表格中右边所对应的一个字符串(所有其他字符不变),然后将转换的结果显示在屏幕上;并分别计算每个数字的置换次数。
十进制数字字符 | 置换成 |
0 | (Zero) |
1 | (One) |
2 | (Two) |
3 | (Three) |
4 | (Four) |
5 | (Five) |
6 | (Six) |
7 | (Seven) |
8 | (Eight) |
9 | (Nine) |
例如,若用户输入的字符串为
Page112-Line3,
则程序5的输出是:
Page(One) (One) (Two)-Line(Three),
数字0到9的置换次数分别是 0 2 1 1 0 0 0 0 0 0
【输入形式】
输入一行字符串,其中可包含字母、数字、空格或其他符号(英文)
【输出形式】
第一行为将字符串中的数字转换为表格中的内容后输出
第二行为数字0~9被转换的次数
【样例输入】
Page112-Line3
【样例输出】
Page(One)(One)(Two)-Line(Three) 0 2 1 1 0 0 0 0 0 0
【思路说明】
本题将输入的代码进行遍历,若为数字字符,转化一下对应的字符,否则,原样输出,在遍历的同时将数字字符出现的次数存储进数组中,即可。
【代码如下】
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1="0123456789";
string s2[]={"(Zero)","(One)","(Two)","(Three)","(Four)","(Five)","(Six)","(Seven)","(Eight)","(Nine)"};
string str;
getline(cin,str);
int arr[10]={0};
int len=str.length();
for(int i=0;i<len;i++)
{
int flag=0;
for(int j=0;j<10;j++)
{
if(str[i]==s1[j])
{
flag=1;
int n=str[i]-48;//将字符转化为数字的简易操作,因为 '0'的 ascii值为 48
arr[n]+=1;//计算字符被转化的次数
cout<<s2[j];
break;
}
}
if(flag==0)cout<<str[i];//该字符非数字字符,原样输出
}
cout<<endl;
for(int i=0;i<10;i++)
cout<<arr[i]<<" ";
}