在刷一些題目的時候,總是會碰到字符串和數字進行轉化的問題,今天我們就在C++中來用多種方法實現。示例代碼上傳至 https://github.com/chenyufeng1991/TransferStringAndInt。
(1)string -> char *
// string -> char *
string str3 = "chenyufeng";
const char *str3ToChar;
str3ToChar = str3.c_str();
在C++中字符串我們常用STL中的(2)char * -> string
// char * -> string
char *str4 = "yufeng";
string str5(str4);
cout << str5 << endl;
直接使用string中的構造函數即可完成使用char *初始化string的操作。(3)使用ostringstream把數字轉化為string
// 可以使用ostringstream把int型輸入到流中,然後轉化為字符串;
ostringstream os; // 字符串輸出流
int i = 123;
os << "Hello" << i;
cout << os.str() << endl;
os << i;
cout << os.str() << endl;
os << "World";
cout << os.str() << endl;
ostringstream其實是字符串的輸出流,可以不斷的在流中插入數據。然後調用ostringstream中的str()方法全部把流中的數據轉化為string。
(4)使用istringstream把字符串轉化為數字
// 用istringstream對象讀一個字符串
istringstream is; // 字符串輸入流
is.str("567");
int j;
is >> j;
cout << j << endl;
(5)atoi:庫函數,char *轉化為int
// string-->int
// 注意:atoi()裡面只能傳遞const char類型,所以需要把string轉化為const char
string str = "789";
int str2int = atoi(str.c_str());
cout << str2int << endl;
注意atoi中的參數傳遞的是char *,而不是string。
(6)sprintf: int 轉化為char *
// int-->srting,Xcode中不能使用itoa這個函數,因為這個函數沒有定義在標准C++裡,但是在有些編譯器裡可以使用,所以這裡推薦使用sprintf
char eeeee[10];
sprintf(eeeee,"%d",444);
cout << string(eeeee) << endl;
其實這裡最方便的是使用itoa,可以直接進行int和char *的轉化,由於我使用的是Xcode進行編程,在Xcode中不能使用itoa這個函數,因為itoa這個函數沒有包括在C++的標准庫中。所以我這裡只能使用sprintf了。大家可以去嘗試一下itoa。