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

C++中string 和其他类型之间的转换

2017-02-19 21:08 423 查看
C++ 中int,char,string,CString类型转换

1. c++中string到int的转换
1) 在C标准库里面,使用atoi:

#include <cstdlib> 

#include <string>
std::string text = "152"; 

int number = std::atoi( text.c_str() ); 

if (errno == ERANGE) //可能是std::errno 



 //number可能由于过大或过小而不能完全存储 



else if (errno == ????) 

//可能是EINVAL 



 //不能转换成一个数字 

}

2) 在C++标准库里面,使用stringstream:(stringstream 可以用于各种数据类型之间的转换)

#include <sstream> 

#include <string>
std::string text = "152"; 

int number; 

std::stringstream ss;

ss << text;//可以是其他数据类型

ss >> number; //string -> int

if (! ss.good()) 



//错误发生 

}
ss << number;// int->string

string str = ss.str(); 

if (! ss.good()) 



 //错误发生 

}

3) 在Boost库里面,使用lexical_cast:

#include <boost/lexical_cast.hpp> 

#include <string>
try 



 std::string text = "152"; 

 int number = boost::lexical_cast< int >( text ); 



catch( const boost::bad_lexical_cast & ) 



 //转换失败 

}                      

2.string 转 CString

CString.format(”%s”, string.c_str());

用c_str()确实比data()要好;
3.char 转 CString

CString.format(”%s”, char*);
4.char 转 string

string s(char *);

只能初始化,在不是初始化的地方最好还是用assign().
5.string 转 char *

char *p = string.c_str();
6.CString 转 string

string s(CString.GetBuffer());

GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.

7.字符串的内容转换为字符数组和C—string

(1)  data(),返回没有”\0“的字符串数组

(2)  c_str(),返回有”\0“的字符串数组

(3)  copy()
8.CString与int、char*、char[100]之间的转换
(1) CString互转int
将字符转换为整数,可以使用atoi、_atoi64或atol。而将数字转换为CString变量,可以使用CString的Format函数。如

CString s;

int i = 64;

s.Format(”%d”, i)

Format函数的功能很强,值得你研究一下。
void CStrDlg::OnButton1()

{

   CString

   ss=”1212.12″;

   int temp=atoi(ss);

   CString aa;

   aa.Format(”%d”,temp);

   AfxMessageBox(”var is ” + aa);

}
(2) CString互转char*
///char * TO cstring

CString strtest;

char * charpoint;

charpoint=”give string a value”; //?

strtest=charpoint;
///cstring TO char *

charpoint=strtest.GetBuffer(strtest.GetLength());
(3) 标准C里没有string,char *==char []==string, 可以用CString.Format(”%s”,char *)这个方法来将char *转成CString。

    要把CString转成char *,用操作符(LPCSTR)CString就可以了。

    CString转换 char[100]

   char a[100];

   CString str(”aaaaaa”);

   strncpy(a,(LPCTSTR)str,sizeof(a));

2.int转换成string的两种方法

第一种是to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数(这几个就是string转int,long,以及long long啦~)

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

不仅int可以转换成string,这些都可以哦~

第二种是借助字符串流:

标准库定义了三种类型字符串流: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

于是……

string Int_to_String(int n)

{

ostringstream stream;

stream<<n;
 //n为int类型

return stream.str();

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string cstring c语言