您的位置:首页 > 编程语言 > C语言/C++

C++中各种数据类型之间的转换

2017-11-13 14:52 615 查看
C++中各种数据类型之间的转换:

1.int 转 string:

1.使用sstream

编程:


#include <sstream>
#include <string>
#include <iostream>

using namespace std;

int main()
{

int m;

stringstream ss;

cin>>m;

string str;

ss<<m;
ss>>str;

cout<<str<<endl;

return 0;
}


注意stringstream 流只能单次使用,

即一次只能将一个int变量输入转为

string变量输出,不可以重复使用。

2.C++11中的库函数to_string()

1.c语言<stdlib.h>

编程:


#include<string>
#include<stdlib.h>
#include<iostream>
using namespace std;

int main()
{
string str="234";
int n=atoi(str.c_str());
cout<<n<<endl;
}


语法:

const char *c_str();
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针


比如:最好不要这样:

char* c;

string s=”1234”;

c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理

应该这样用:

char c[20];

string s=”1234”;

strcpy(c,s.c_str());

这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作

再举个例子

c_str() 以 char* 形式传回 string 内含字符串

如果一个函数要求char*参数,可以使用c_str()方法:

string s = “Hello World!”;

printf(“%s”, s.c_str()); //输出 “Hello World!”

2.C++11中的stoi()

#include<iostream>
#include<string>
using namespace std;

int main(){
string str="234";
int n=stoi(str);
cout<<n<<endl;
return 0;
}

注意,因为是c++11的标准
编译时候的格式:
g++ test.cpp -o test -std=c++11


2.各种基本数据类型

int /long /long long / unsigned /unsigned long/unsigned long long/

/float /double/long double

转为string 类型。

1.std命令空间下有一个C++标准库函数std::to_string(),
可用于将数值类型转换为string。使用时需要include头文件<string>。

函数原型申明如下:


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);


编程:

#include<iostream>
#include<string>
using namespace std;

int main(){

string str;
int n=123;

str=to_string(n);

cout<<str<<endl;
return 0;
}


注意,这个也是c++11标准

#include<iostream>
#include<string>
#include <iomanip>
using namespace std;

int main(){

string str;
double n=123.233;

str=to_string(n);

cout<<setfill('*')<<setw(20)<<str<<endl;
return 0;
}


setw(20)对其后面的str变量起作用,也就是设置str输出的时候占据20字节,

setfill(‘‘)将前面的空格以‘’填充。配合使用。

都需要包含头文件 “#include ”

2.使用c标准函数库
包含头文件  #include <stdlib.h>


具体函数:

string -> int : atoi(str.c_str())

string -> unsigned int : strtoul(str.c_str(),NULL,10)

string ->long long int: atoi(str.c_str())

string ->unsigned long long int : strtoull(str.c_str(),NULL,0)

string -> float / double : atof(str.c_str())

string -> long double : strtold(str.c_str())


3.使用c++11标准中引入的c++库函数:


string str;

stoi(str)

stol(str)

stoul(str)

stoll(str)

stoull(str)

stof(str)

stod(str)

stold(str)


总结,一般的话,用C++11标准中的 to_string()函数 和对应的 stoi() 等函数

不能用c++11标准的时候,用str.c_str() 结合atoi() 、atof() 函数来使用。

string 转其他类型: 即int n=atoi(str.c_str()) ; double db=atof(str.c_str());

其他类型转string:

最后,C++中字符数组和string 类型如何相互转化呢

1.字符数组转化为string 类型:

编程:


#include<iostream>
#include<string>

using namespace std;

int main(){

string str;

char ch[]="abcdefg";

str=ch;

cout<<str<<endl;
return 0;
}


如上,把字符数组直接当成string 类型的变量来操作即可。

2.string 类型转化为字符数组类型:


编程:

#include<iostream>
#include<string>
#include <cstring>

using namespace std;

int main(){

string str("abcdefg");

char buf[10];

strcpy(buf,str.c_str());

cout<<buf[5]<<endl;
return 0;
}


如上,注意,需要包含头文件#include
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: