c++中的int与char之间转换问题

    在平时的acm中很容易见到数据类型需要在数字和字符之间转换的问题,我以一个简单的编程题来说一下这个问题。

问题描述:

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

 

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10​100​​。

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

 思路:我们知道加入我们以一个string类型存储这个数,这个“数字”的每一位就好拿出来,进行累加。然后再将累加的数每一位拆开,让它按照对应的拼音输出即可。

可能遇到的问题:首先,以string类型存储数字后,每一位上存储的是一个字符而不是数字,所以如果直接使用‘+’会产生错误(但编译时候不会报错);其次,累加之后数据类型应该是一个int型的,按照我们的思路,对应拼音输出的时候应该是字符。

关键点:

 涉及到了两次类型转换。一次是在计算各位之和的时候,一次是在对应拼音输出结果的时候。

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
void judge(char num){
	switch (num){
		case '0':
			cout <<"ling";
			break;
		case '1':
			cout << "yi";
			break;
		case '2':
			cout << "er";
			break;
		case '3':
			cout << "san";
			break;
		case '4':
			cout << "si";
			break;
		case '5':
			cout << "wu";
			break;
		case '6':
			cout << "liu";
			break;
		case '7':
			cout << "qi";
			break;
		case '8':
			cout << "ba";
			break;
		case '9':
			cout << "jiu";
			break;
	}
}

int main(){
	string n;
	stringstream ss;
	cin >> n;
	int sum=0;
	for(int i=0;i<n.length();++i){
		sum =sum +( n[i]-'0');       //将char转换成int,进行累加;
	}
	ss << sum;
	string s = ss.str();             //将int转换成string,方便取出每一位上的字符;
	for(int j=0;j<s.length();++j){
		judge(s[j]);
		if(j!=s.length()-1)
			cout << " ";
	}
	
	return 0;
}

具体的算法实现很简单,主要说一下在这个过程中用到的两种转化方法。

第一种:

用到了ASCII码。(ASCII表我就不列了,网上有很多。)简单来说就是:char型的要转换成int型的,ASCII码差了一个‘0’的距离。

eg:char型转化成int

char s=‘1234’;
int a;
a = s - '0';//这就是实现了char型向int转化;

int 转化成char:

int a = 123445;
char s;
s = a+'0';

第二种:

用包含在sstream库中的stringstream。简单来说stringstream的作用就是它吃进去一个类型,然后给你吐出来另一个你想要的类型。

stringstream ss;
int a = 1234;
ss << a;
string s = ss.str(); //s此时就是一个字符串类型的了;

关于这个题的解法肯定还有更简单的,这里不过多研究,主要是为了简单说明一下这两个类型之间的转化问题。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值