常用函数的一些小总结
string to int(字符串转到int类型)
#include<sstream> //重要的库
#include<iostream>
#include<string>
using namespace std;
int str2int(string str){
stringstream ss;
int value;
ss<<str; //将字符串传到ss流中
ss>>value; //将 流 传到int类型的value中
ss.clear();
return value;
}
int to string(int转换到string)
原理是一样的,都是ss流来转换,只不过反过来而已
string int2str(int value){
stringstream ss;
string str;
ss<<value;
ss>>str;
ss.clear();
return str;
}
关于进制换算
比如16进制、10进制、8进制到8进制、10进制,我认为都可以通过转成2进制来转换。
进制换算目前我总结起来,有两大类,第一类有两种方法(倒余除法、位权值法),第二类只有一种方法(一 一对应法)。
第一类 10进制的转换和被转换(不讨论小数部分)(n进制 to 10或者10 to n进制)
1.倒余除法 用于10进制到n进制
10->16
10->8
10->2
例如
10进制下的数值28 转成 8进制
【商,余数】=(被除数,除数)
【3,4】=(28,8)
【0,3】=(3,8)
得到余数 4 、3 ,将余数的序列倒过来就变成了8进制的转化结果34。
2.位权值法 用于n进制到10进制
(所有方法的名字我是随便想的,别介意)
如:
16->10
8->10
2->10
就是用他们的数码*原来进制的位权之和(通俗的理解就是,该数字所在的位置的权重)
比如 10进制的523->10进制
523 = 5X100+2X10+3X1(其中5、2、3称为数码,100、 10 、1 称为位权)=523
比如 16进制的C35 ->10进制
C35 = C X 16的2次方+3 X 16的1次方 + 5 X 16的0次方 = …(自己计算)
第二类 n进制 to 2 或者 2 to n进制(n不包括10)
方法: 一一对应
1.
16进制、8进制 —> 2进制
n进制 可以用 k位2进制数来表示
16进制 可以用 4位2进制来表示
8进制 可以用 3位2进制数来表示
我们以16进制为例
C59(16进制) =???(2进制)
C对应的二进制是1100
5对应的二进制是0101
9对应的二进制是1001
顺序组合下来就是答案110001011001
8进制转2进制类似,就是将每一位数字表示为对应的二进制数字串,然后顺序组合起来。
2.
2进制—> 8进制、 16 进制
方法就是第1.倒过来
举例:
(2进制) 110001011001 = ???(8进制)
如果2进制数字串划分为几个3位(8进制)或者4位(16进制)的小组不够长度,就需要在最开始的前面补一个0或者两个0,直到补够为长度是3的倍数为止。
蓝桥杯题目 十六进制转八进制
思路
先将十六进制(Hexadecimal)转为二进制(Binary)
再讲二进制转到八进制(Octal)
于是,先用一 一对应法将16转换为2进制,再用一 一对应发由2进制到8进制。
#include<iostream>
#include<string> //字符串
#include<cctype>
#include<algorithm>
#include<tgmath.h>
#include<sstream>
using namespace std;
//蓝桥杯好像不允许str。to_string()通过,所以换个方法
string toString(int value){
string str;
stringstream ss;
ss << value;
ss >> str;
ss.clear(); //清楚这个流中残留的数据
return str;
}
string hexaToBina(string hexa){
string bina;
for(int i=0