C++ 中 string, char*, int 类型的相互转换

C++ 中 string, char*, int 类型的相互转换

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

BTW:用 atof() 函数可以把字符串型 char* 转浮点数型 float

函数原型:double atof(const char *nptr); 

函数说明:atof() 会扫描参数 nptr 字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。返回值返回转换后的浮点型数。

Example:

复制代码
/* 将字符串a 与字符串b转换成数字后相加*/
#include<stdlib.h>
main()
{
  char *a=”-100.23”;
  char *b=”200e-2”;
  float c;
  c=atof(a)+atof(b);
  printf(“c=%.2f\n”,c);
}
复制代码

参考博客:1)C++ 中int,char,string,CString类型转换(一)

     2)C语言中string char int类型转换

     3)string, char*, int类型转换 , c++强制转化

     4)C++中int型与string型互相转换

猜你喜欢

转载自blog.csdn.net/momo_mo520/article/details/80857323