一、int
1、int 轉換成 string
1) to_string函數 —— c++11標准增加了全局函數std::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);
2) 借助字符串流
標准庫定義了三種類型字符串流: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
Example:
1 int aa = 30; 2 stringstream ss; 3 ss<<aa; 4 string s1 = ss.str(); 5 cout<<s1<<endl; // 30
二、string
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
(1) data(),返回沒有”\0“的字符串數組 (2) c_str(),返回有”\0“的字符串數組 (3) copy()
CString.format(”%s”, string.c_str());
用c_str()確實比data()要好;
3.string 轉 char *
char *p = string.c_str();
三、char*
1.char* 轉 CString
CString.format(”%s”, char*);
2.char* 轉 string
string s(char *);
只能初始化,在不是初始化的地方最好還是用assign().
3、用 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); }
四、Cstring
1.CString 轉 string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否則就沒有釋放緩沖區所占的空間。
2.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));
參考博客:1)C++ 中int,char,string,CString類型轉換(一)