C++ 中 string, char*, int 類型的相互轉換


一、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類型轉換(一)

     2)C語言中string char int類型轉換

     3)string, char*, int類型轉換 , c++強制轉化

     4)C++中int型與string型互相轉換


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM