首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 字符串與數字互轉完全指南:6 種標準庫與 C 風格方法

     編輯:關於C++

核心轉換對照表

方向推薦方法 (C++11+)C 風格/舊標準備註
string → int/floatstd::stoi/std::stodatoi/atof拋出異常 vs 靜默返回 0
int/float → stringstd::to_stringsprintf/itoaitoa 非標準
string ↔ streamstd::ostringstream/istringstreamstrstream (棄用)格式化控制最強
string → char*c_str() (const)手動 new char[] + strcpy生命週期綁定 string
char* → stringstring(str) 構造同上自動拷貝

詳細代碼示例

1. 現代 C++ 首選:<string> 轉換函數 (C++11)

// string → 數字
string s = "12345";
int i = stoi(s);          // 12345
double d = stod("3.14");  // 3.14
// 異常處理
try { stoi("abc"); } catch (const invalid_argument&) { /* 非數字 */ }
catch (const out_of_range&) { /* 溢出 */ }

// 數字 → string
string s2 = to_string(42);      // "42"
string s3 = to_string(3.14159); // "3.141590" (固定精度)

2. 流操作:格式化完全控制

#include 
#include 

// 數字 → 格式化 string
ostringstream oss;
oss << hex << uppercase << setw(8) << setfill('0') << 255; // "000000FF"
string hexStr = oss.str();

// string → 數字 (支援進制、浮點格式)
istringstream iss("0xFF");
int val; iss >> hex >> val; // 255

3. C 風格函數 (兼容舊代碼/嵌入式)

#include   // atoi, atof, strtol, strtod
#include    // sprintf, sscanf

// string → int (注意: 僅接受 const char*)
string s = "789";
int v = atoi(s.c_str());        // 簡單但無錯誤檢查
long lv = strtol(s.c_str(), nullptr, 10); // 推薦: 有錯誤檢查、支援進制

// int → char* (需預分配緩衝區)
char buf[32];
sprintf(buf, "%d", 444);        // "444"
snprintf(buf, sizeof(buf), "%d", 444); // 安全版本
string s4(buf);

4. string 與 char* 互轉

string str = "hello";
const char* cstr = str.c_str(); // 僅讀,生命週期 ≤ str
// 需可修改副本:
vector writable(str.begin(), str.end());
writable.push_back('\0');
char* modifiable = writable.data();

char* cstr2 = "world";
string str2(cstr2); // 構造拷貝

性能與安全建議

  • 高頻熱點路徑:to_string/stoi 分配臨時字符串,極致性能可用 char buf[32] + snprintf/fast_io 庫。
  • 錯誤處理:stoi 拋異常,strtol 返回值 + errno/endptr 檢查,選擇項目風格統一。
  • 避免 itoa:非標準,MSVC/部分嵌入式才有,跨平台用 sprintf 或 to_string。
  • C++17 std::from_chars:無異常、無分配、高性能解析,首選新項目。

總結

現代 C++ 開發:數字→字符串用 to_string,字符串→數字用 stoi/stod 或 from_chars (C++17),複雜格式用 ostringstream/istringstream。理解各方法錯誤語義與性能特徵,根據場景選型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved