指定输出格式
#include <bitset>
#include<iostream>
using namespace std;
int main()
{
int str;
cin>>std::dec>>str; //以10进制输入string(保存为int)
cout << "8进制:" << std::oct << str<< endl;
cout << "10进制" << std::dec << str << endl;
cout << "16进制:" << std::hex << str << endl;
cout << "2进制: " << bitset<8>(str) << endl; //<8>:表示保留8位输出
return 0;
}
C语言库函数
C语言提供一系列函数,将字符串转换为整数,包括:
- int atoi(const char *nptr):将字符串nptr转换为int
- long atol(const char *nptr):将字符串nptr转换为long int
- long long atoll(const char *nptr):将字符串nptr转换为long long int
#include <stdlib.h>
int main()
{
int i=0;
i=atoi("123");
printf("i=%d\n",i); // 输出i=123
i=atoi("123abc");
printf("i=%d\n",i); // 输出i=123,合法数字后的abc被忽略
i=atoi("abc123");
printf("i=%d\n",i); // 输出i=0,数字前有字符为非法
i=atoi("+123");
printf("i=%d\n",i); // 输出i=123,+是合法字符
i=atoi("-123");
printf("i=%d\n",i); // 输出i=-123,-是合法字符
return 0;
}
C++库函数
stoi(const string s,int begin,int n):将n进制的字符串s从begin位置开始转化为10进制数。
- 参数是const string类型
- 会做范围检查,默认在int范围内,超出会runtime error
#include<string.h> //头文件
stoi(str, , ); //字符串str从0位置开始到末尾的2进制转换为10进制(int型)
stol(str,0,radix); //字符串str从0位置到末尾的radix进制数转换为10进制(long型)
字符串流 stringstream
#include<iostream>
#include<string>
#include<sstream> //头文件
using namespace std;
int main()
{
//8or16进制转10进制
string s="20";
int a;
stringstream ss;
ss<<hex<<s; //以16进制将s读入流中
ss>>a; //以10进制int型输出
cout<<a<<endl; //输出:32
//10进制转8or16进制
string s1,s2;
int a=30;
stringstream ss;
ss<<oct<<a; //以8进制读入流中
ss>>s1; //再以字符串输出
cout<<s1<<endl; //输出:36
ss.clear(); //不清空可能会出错
ss<<hex<<a; //以16进制读入流中
ss>>s2;
cout<<s2<<endl; //输出:1e
return 0;
}
函数实现
#include <iostream>
#include <string>
using namespace std;
/* Atoi():任意进制转换为10进制(字符串类型转整数型) */
int Atoi(string s,int radix) //s是给定的radix进制字符串
{
int ans=0;
for(int i=0;i<s.size();i++)
{
char t=s[i];
if(t>='0' && t<='9') ans = ans*radix + t - '0';
else ans = ans*radix + t - 'a' + 10;
}
return ans;
}
/* intToA():将10进制整型数转换为radix进制string */
string intToA(int n,int radix) //n是待转10进制数,radix是指定的进制
{
string ans="";
do{
int t = n % radix;
if(t>=0 && t<=9) ans += t + '0';
else ans += t - 10 + 'a';
n/=radix;
}while(n!=0); //使用do{}while()以防止输入为0的情况
reverse(ans.begin(),ans.end());
return ans;
}