📜  C++中的stringstream及其应用(1)

📅  最后修改于: 2023-12-03 15:14:03.172000             🧑  作者: Mango

C++中的stringstream及其应用

在C++中,stringstream是一个非常重要的工具,它允许将字符串和数字相互转化,同时也可用于快速格式化输出等多个方面。

stringstream的基本原理

stringstream是一个基于string类的流输入/输出对象,其语法类似于C++中的iostream。

我们可以通过以下方式声明和初始化一个stringstream对象:

#include <sstream>
#include <string>

// 声明和初始化一个stringstream对象
std::stringstream ss;
std::string str = "Hello World!";
ss << str;

在上述代码中,我们将string类型的变量str插入到了一个stringstream对象ss中。插入操作符<<将字符串插入到了输出流中,表示我们将str作为输出流的数据源。此时,ss中储存了字符串"Hello World!"。

另一方面,如果我们想要从一个stringstream对象中读取数据,则可以使用输入操作符>>。例如:

#include <sstream>
#include <string>

// 声明和初始化一个stringstream对象
std::stringstream ss("123 45.67 hello world");
int a; // 定义整型变量a
double b; // 定义浮点型变量b
std::string c, d; // 定义两个字符串变量

ss >> a >> b >> c >> d; // 将每个数据读取到对应的变量中

std::cout << a << std::endl; // 输出:123
std::cout << b << std::endl; // 输出:45.67
std::cout << c << std::endl; // 输出:"hello"
std::cout << d << std::endl; // 输出:"world"

在这个例子中,stringstream对象ss中储存了一串包括整型数值、浮点型数值、字符串等多种数据类型的字符,并通过输入操作符>>将每一个数据读取到了对应的变量中。

需要注意的是,在读取完一部分数据后,完成后我们不必显式地关闭或清除stringstream对象。我们可以将其视为一个缓存区,等待下一次操作。

将数字转化为字符串

stringstream的一个重要应用是将数字转化为字符串。当我们需要在程序中用到数字或数值型数据的时候,通常情况下需要将它们转化成字符串类型。这可以通过以下方式完成:

#include <sstream>
#include <string>

int num = 123;
std::stringstream ss;
ss << num;
std::string str;
ss >> str; // 字符串变量str中储存了123

在这个例子中,我们将一个整型数值num储存到了一个stringstream对象ss中,然后通过输入操作符>>将其读取到了字符串变量str中。此时,str中储存的是整型数值123的字符串形式。

将字符串转化为数字

如果我们需要将一个数字字符串转化为数字型数据,我们也可以利用stringstream。以下是一个例子:

#include <sstream>
#include <string>

std::string str = "123.45";
std::stringstream ss;
ss << str;
double num;
ss >> num; // 将字符串str转化为实数double型数据

在这个例子中,我们将字符串"123.45"储存到了stringstream对象ss中,然后通过输入操作符>>将其转化为实数double型数据num。

快速格式化输出

除了以上两个应用外,stringstream还可以用来快速格式化输出。假设我们有一些数据需要输出,而我们需要把它们连接成一个字符串,在输出到控制台或写入文件。我们可以使用stringstream的输出操作符<<完成这一操作:

#include <sstream>
#include <string>

int a = 123;
double b = 45.67;
std::string c = "Hello";
std::stringstream ss;
ss << a << " " << b << " " << c;
std::string output;
ss >> output; // 将“123 45.67 Hello”格式化为一个字符串
std::cout << output << std::endl; // 输出:123 45.67 Hello

在这个例子中,我们将整型数值a、浮点型数值b和字符串c插入到了一个stringstream对象ss中,然后使用输出操作符<<完成了格式化输出。最终字符串变量output中储存了格式化后的输出。

总结

在C++中,stringstream是一个非常重要的工具,可以将字符串和数字互相转换,也可以用于快速格式化输出。掌握stringstream的使用方法对于实际开发和调试都具有极大的帮助。