C/C++關於字串string、char*字串陣列與其他型別轉換
阿新 • • 發佈:2018-12-30
1. string、const char*與char*之間轉換
1.1 const char*<——>string
const char*指標常量可以直接賦值給string型別,而string型別可以呼叫c_str( )方法來轉換為const char*型別。
#include<string>
using namespace std;
//const char*轉為string
const char* nzArr = "abcd";
string str = nzArr;
//string轉為const char*
string str("abcd");
const char * nzArr = str.c_str();//呼叫string的c_str()方法
1.2 const char*<——>char*
字元指標char*可以直接賦值給指標常量const char*。但是const char*賦值給char*需要去掉指標常量的const屬性。呼叫const_cast用來丟棄變數的const宣告。
//char*轉為const char*
char* nzArr = "abcd";
const char* nzConArr = nzArr;
//const char*轉為char*
const char* nzConArr = "abcd";
char* nzArr = const_cast <char*>(nzConArr);
1.3 string<——>char*
這樣從1.1和1.2分析後,我們就可以直接看出char*直接賦值給string,而string需要呼叫const_cast
//char*轉為string
char * nzArr = "abcd";
string str = nzArr;
//string轉為char*
string str = "abcd";
char* nzArr = const_cast<char*>(str.c_str());
2.char*與其他型別之間轉換
這裡主要是依靠<stdlib.h>
標頭檔案中宣告的函式實現轉換。
2.1 char*轉為double
double atof(const char*) //由於char*可以給const char*賦值,所以相當於char*轉為double
atof跳過前面的空格字元,直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時(‘\0’)才結束轉換,並將結果返回。字串可包含正負號、小數點或E(e)來表示指數部分,如123.456或123e-2。
2.2 char*轉為int
int atoi(const char*)
2.3 char*轉為long
long int strtol(const char *nptr,char **endptr,int base);
① 引數base代表採用的進位制方式,如base值為10則採用10進位制。可以取值從2到36。
② 若引數endptr不為NULL,則會將遇到不合條件而終止的nptr中的字元指標由endptr返回;若引數endptr為NULL,則會不返回非法字串。
char* nzArr = " 12345";
char* endptr;
long nNum =strtol(nzArr,&endptr,10); //nzArr返回12345
char * nzArr = " 123a56";
char* nzptr ;
long lNum = strtol(nzArr,&nzptr,10);//nzArr返回123,nzptr返回a56
2.4 char*轉為double
double strtod(const char*,char** endptr);
endptr參考2.3中說明。
char* nzArr = "12345.667",*endptr;
double dVel = strtod(nzArr,&endptr);//nzArr是12345.667
個人學習記錄,由於能力和時間有限,如果有錯誤望讀者糾正,謝謝!