C++中字符串和int\float\char*类型的相互转换
因为本人参加算法类比赛,会有题目有这方面的需求,虽然网上文章很多,但都不够综合,所以整理至此,方便自己也方便后人。
至于long\double等转成string类型,这里不再赘述
一、string和char*的互转
1. char*->string
const char* nodename;
string temp = nodename;
string temp2(nodename);
2. string->char*,当然也有些其他的做法,但是看到说可能不安全,而且有些转换后是const的,不方便。看来看去还是这个最舒服。
string str="sdfgdsfgdf";
char s[100];
strcpy(s,str.c_str());
二、string转int的方式(代码均已考虑到负号和前导0的情况。参考:https://www.cnblogs.com/A-Little-Nut/p/8056421.html)
-
按照十进制的特点进行算术运算得到int,简单的代码如下。
int str2int(string a){
int res=0;
if(a[0]!='-'){
res+=a[0]-'0';
}
_for(i,1,a.length()){
res*=10;
res+=a[i]-'0';
}
if(a[0]=='-'){
res*=-1;
}
return res;
} -
采用标准库(#include<stdlib.h>)中atoi函数。
string s = "12"; int a = atoi(s.c_str());
对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等。
-
采用sstream头文件中定义的字符串流对象来实现转换。(#include <sstream> )
istringstream is("12"); int i; is >> i;
-
三、int转string的方式(若int有前导0,默认int为8进制)
-
c++11标准增加了全局函数std::to_string:(不一定所有比赛都支持c++11)
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
-
自己实现,其中,max为n值的长度+1(参考:https://www.cnblogs.com/smile233/p/8379802.html)
string to_String(int n,int max){ int m = n; char s[max]; char ss[max]; int i=0,j=0; if (n < 0){ m = 0 - m; j = 1; ss[0] = '-'; } while (m>0){ s[i++] = m % 10 + '0'; m /= 10; } s[i] = '\0'; i = i - 1; while (i >= 0){ ss[j++] = s[i--]; } ss[j] = '\0'; return ss; }
-
借助字符串流。标准库定义了三种类型字符串流:istringstream,ostringstream,stringstream,看名字就知道这几种类型和iostream中的几个非常类似,分别可以读、写以及读和写string类型,它们也确实是从iostream类型派生而来的。要使用它们需要包含sstream头文件。
除了从iostream继承来的操作
1.sstream类型定义了一个有string形参的构造函数,即: stringstream stream(s); 创建了存储s副本的stringstream对象,s为string类型对象
2.定义了名为str的成员,用来读取或设置stringstream对象所操纵的string值:stream.str(); 返回stream中存储的string类型对象stream.str(s); 将string类型的s复制给stream,返回void
int aa = 30; stringstream ss; ss<<aa; string s1 = ss.str(); cout<<s1<<endl;
此处,用ostringstream也可以。
- (未完待续)