最近刷题有用到字符串和整形数字之间的转化,特地总结一下。
int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)---前缀加0,16进制(hex)---前缀加0x或者0X。
string前后加上双引号,告诉编译器把它当成一串字符来解释。
注意:对于字符,需要区分字符和字符表示的数值。比如:char a = 8;char b = '8',a表示第8个字符,b表示字符8,是第56个字符。
一、字符串转化为整数
1、可以使用的函数stoi(),stod(),stoll()等,总结表格如下:
atof | 将字符串转换成浮点型数 |
atoi | 将字符串转换成整型数 |
atol | 将字符串转换成长整型数 |
strtod | 将字符串转换成浮点数 |
strtol | 将字符串转换成长整型数 |
strtoul | 将字符串转换成无符号长整型数 |
toascii | 将整型数转换成合法的ASCII 码字符 |
toupper | 将小写字母转换成大写字母 |
tolower | 将大写字母转换成小写字母 |
举例:
string str = "3.1415926";2、 符串转数字:使用sscanf()函数,举例如下:
cout<<str<<endl;
double d = stod(str);
cout<<d<<endl;
char str[]="1234321";3、 使用stringstream,举例如下:
int a;
sscanf(str,"%d",&a);
/////////////////////////////
char str[]="123.321";
double a;
sscanf(str,"%lf",&a);
////////////////////////////
char str[]="AF";
int a;
sscanf(str,"%x",&a); //16进制转换成10进制
string s = "17";
stringstream ss;
ss<<s;
int i;
ss>>i;
cout<<i<<endl; // 17
二、整数转化为字符串
1、使用sprintf(),举例如下:
char str[10];2、使用itoa(int to string),char* itoa(int num,char*str,int radix),举例如下:
int a=1234321;
sprintf(str,"%d",a);
cout<<str<<endl;
int a = 10;3、使用stringstream, 举例如下:
char ch[10];
itoa(a,ch,10);
cout<<ch<<endl;
int a = 10;4、使用to_string() , 举例如下:
stringstream s;
s<<a;
string s1 = s.str();
cout<<s1[0]<<" "<<s1[1]<<endl;
int ii = 1234;
string sss = to_string(ii);
cout<<ii<<" "<<sss[0]<<" "<<sss[1]<<endl;
参考资料: