在C++編程中有時會遇到字符串和數字的相互轉化,以前學習的時候老師喜歡將這種轉化當成作業,要我們寫函數實現。但是實際為了方便准確還是會優先使用STL來完成。 在 C 標准庫中提供了字符串到數值類型的轉化函數,但是沒有提供數值到字符串的轉換(不過有些系統如 Windows API中提供數值到字符串的轉化)。先看看C標准庫中的字符串轉化函數,這些函數都包含在頭文件
表1 C 標准庫中的字符串轉換函數
這些函數的用法想必都比較熟悉就不多說了,細節可以參考 C或C++ 標准庫。這裡主要說下借助 C++ 標准模板庫中的 stringstream 來完成字符串的轉換。
平時我們在用 std::cout 和 std::cin 時,感覺很直接,它能根據你的數據類型自動的執行輸入輸出操作,無論是字符、整型、浮點型,它都能以字符串形式輸出到控制台,同樣也可以從控制台讀入字符串,解析成各種數值類型。上面提到的 stringstream 派生自 iostream,繼承了iostream的輸入輸出操作,你可以把它看成std::cout 和 std::cin的內存版本,對其進行的輸入輸出不是與控制台交互,而是與stringstream內部的字符串交互。下面是stringstream 的繼承圖:
圖1 C++標准I/O庫繼承圖
接下來舉兩個例子,應該就都會用了:
(1)字符串 --> 數值類型 先准備好包含數值類型的字符串,然後定義 istringstream 實例,使用其輸入操作將其內部的字符串解析為相應的數值類型,最後輸出。
#include
運行結果: v1=12 ,v2=3.14
(2)數值類型 --> 字符串 先准備好數值類型數據,然後定義 ostringstream 實例,使用其輸出操作將數值類型輸出到 stringstream 內部字符緩沖區中,最後調用 ostringstream::str() 成員函數獲取內部字符串。
#include
運行結果: str=12 2.14 3.14159 123456789ABCDEF
如果不知道輸入輸出方向,也可以直接使用 stringstream。