📅  最后修改于: 2023-12-03 15:05:21.941000             🧑  作者: Mango
ssteam 是 C++ 中一个十分有用的标准库,它能够从字符串中提取数据,也能把数据转变为字符串。
在某些场景下,我们需要一个将数字和字符串相互转化的工具,比如 itoa
、 atof
和 atoi
这些函数都需要手动编写或依赖库,在C++11之前必须使用 itoa
和 atof
,但它们并没有很好的处理浮点数所带来的精度、舍入等问题。随着C++11的到来,我们可以更好地利用 stringstream
实现对字符串处理的需求。
对于 stringstream
这个类,我们可以通过其提供的接口函数将不同类型的数据转化成一个字符串输出,也可以通过将字符串读入就以解析出内部的数据。
stringstream
的实现基于 iostream
以及基于它的一些实现。因此,它是一个绑定的流。
#include <iostream>
#include <sstream>
int main()
{
std::stringstream ss;
ss << "The answer is: " << 42;
std::string str = ss.str();
std::cout << str << std::endl;
return 0;
}
运行结果:
The answer is: 42
注意:以上的代码中
stringstream
是一个类,需要通过构造函数进行初始化。
下面介绍一下 stringstream
的常用操作:
<<
操作符当我们向 stringstream
通过 <<
操作符插入数据时,将自动将这些数据转为字符串并添加到串流中。
示例:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream str;
str << "hello " << "world " << "!" << std::endl;
std::cout << str.str();
return 0;
}
执行的结果是:
hello world !
>>
操作符当我们从 stringstream
通过 >>
操作符读取数据时,将自动将这些数据从串流中解析。
示例:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream str("23.65 this is a string data");
double num;
std::string data;
str >> num >> data;
std::cout << "Num: " << num << std::endl;
std::cout << "Data: " << data << std::endl;
return 0;
}
执行结果是:
Num: 23.65
Data: this
注意:
>>
操作符具有类似于cin
的功能,可以按类型拆分从stringstream
中读取数据。
.str()
函数通过 .str()
函数可以将 stringstream
中的数据转为字符串。
示例:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream str;
str << "hello " << "world " << "!" << std::endl;
std::cout << "String: " << str.str();
return 0;
}
执行结果:
String: hello world !
.clear()
函数通过 .clear()
函数可以清空 stringstream
中的数据。
#include <iostream>
#include <sstream>
int main()
{
std::stringstream str;
str << "hello " << "world " << "!" << std::endl;
std::cout << "String: " << str.str();
str.clear();
std::cout << "Cleared!";
return 0;
}
执行结果:
String: hello world !
Cleared!
本文主要介绍了 stringstream
的使用及其常见操作。
在 C++ 中,stringstream
经常被用于将数字转化为字符串、将字符串解析为数字,以及将符号表达式转化为运算表达式等操作。