Stringstream、string 和 char* 的相互转换:
在 C++ 编程中,经常需要在不同类型的字符串表示之间进行转换,主要涉及三种类型:std::stringstream
、std::string
和 char*
。我将逐一解释它们之间的转换方法和应用场景。
1. std::string 与 std::stringstream 的转换
从 std::string 到 std::stringstream:
cpp#include <sstream> #include <string> std::string str = "Hello World"; std::stringstream ss; ss << str; // 将 std::string 对象 str 插入到 stringstream 中
从 std::stringstream 到 std::string:
cppstd::stringstream ss; ss << "Hello World"; std::string str = ss.str(); // 使用 stringstream 的 str() 方法获取 std::string
2. std::string 与 char* 的转换
从 std::string 到 char:*
cpp#include <string> std::string str = "Hello World"; const char* cstr = str.c_str(); // 使用 c_str() 方法获取对应的 const char* 指针
从 char 到 std::string:*
cppconst char* cstr = "Hello World"; std::string str(cstr); // 直接使用 char* 初始化 std::string 对象
3. std::stringstream 与 char* 的转换
从 char 到 std::stringstream:*
cppconst char* cstr = "Hello World"; std::stringstream ss; ss << cstr; // 将 const char* 的内容插入到 stringstream 中
从 std::stringstream 到 char:*
这种转换不是直接支持的,因为 std::stringstream
通常转换为 std::string
后再转为 char*
。过程如下:
cppstd::stringstream ss; ss << "Hello World"; std::string str = ss.str(); const char* cstr = str.c_str();
应用场景示例:
假设我们正在开发一个功能,需要读取一个文本文件的行,处理这些行,然后将它们写入另一个文件。这里我们可能会使用 std::stringstream
来处理字符串拼接,std::string
来存储中间结果,最后通过 char*
接口与 C 风格的 I/O 函数进行交互。
cpp#include <fstream> #include <sstream> #include <iostream> #include <string> int main() { std::ifstream infile("input.txt"); std::ofstream outfile("output.txt"); std::string line; while (std::getline(infile, line)) { std::stringstream ss; ss << "Processed: " << line; std::string processedLine = ss.str(); outfile << processedLine << std::endl; } infile.close(); outfile.close(); return 0; }
在这个例子中,我们利用了 std::stringstream
来构建新的字符串,std::string
来存储这些字符串,并将它们输出到文件中。虽然这里没有直接使用 char*
,但是我们可以使用 .c_str()
在需要与 C 风格字符串 API 兼容的情况下使用它。