跳转到主内容
极星编程网:以代码为星,赴技术山海!

C++ - 标准库之 <sstream> ostringstream(ostringstream 概述、基本使用、清空内容、进阶使用)

一、

std::ostringstream

概述

std::ostringstream

是 C++ 标准库中的一个类,用于将数据格式化为字符串

std::ostringstream

结合了流操作和字符串操作的功能,可以像使用 cout 一样向字符串写入数据 二、

std::ostringstream

基本使用 构造与初始化

#include

#include

using namespace std;

int main() {

// 默认构造(空字符串) ostringstream oss1;

// 带初始字符串构造 ostringstream oss2("init text");

return 0; }

写入数据与获取字符串

#include

#include

using namespace std;

int main() {

ostringstream oss;

oss << "Hello" << " " << 42 << " " << 3.14;

string result = oss.str(); cout << result << endl;

// 清空内容 oss.str("");

return 0; }

# 输出结果

Hello 42 3.14

三、

std::ostringstream

清空内容 1、如果不清空内容 如果不清空内容,

std::ostringstream

会保留之前写入的所有内容,后续写入会追加到已有内容之后

#include

#include

using namespace std;

int main() {

ostringstream oss;

oss << "Hello" << " World";

string result1 = oss.str(); cout << result1 << endl;

string result2 = oss.str(); cout << result2 << endl;

return 0; }

# 输出结果

Hello World Hello World

2、清空内容的方式 赋空字符串

oss.str("");

构造空字符串

oss.str(string());

四、

std::ostringstream

进阶使用 1、格式化控制

#include

#include

using namespace std;

int main() {

ostringstream oss;

oss << hex << 255;

string result = oss.str(); oss.str("");

cout << result << endl;

return 0; }

# 输出结果

ff

#include

#include #include

using namespace std;

int main() {

ostringstream oss;

oss << setw(10) << "text";

string result = oss.str(); oss.str("");

cout << result << endl;

return 0; }

# 输出结果

text

#include

#include #include

using namespace std;

int main() {

ostringstream oss;

oss << setfill('*') << setw(8) << 42;

string result = oss.str(); oss.str("");

cout << result << endl;

return 0; }

# 输出结果

******42

#include

#include #include

using namespace std;

int main() {

ostringstream oss;

oss << fixed << setprecision(2) << 3.14159;

string result = oss.str(); oss.str("");

cout << result << endl;

return 0; }

# 输出结果

3.14

2、追加内容 str 方法用于完全替换流中的内容,且流的位置指针会被重置到开头,如果直接追加内容,追加内容会覆盖掉替换内容

#include

#include

using namespace std;

int main() {

ostringstream oss;

// 追加内容 oss.str("New content");

// 替换内容 oss << " appended";

string result = oss.str(); oss.str("");

cout << result << endl;

return 0; }

# 输出结果

appendednt

使用 seekp 方法定位到行末,再追加内容

#include

#include

using namespace std;

int main() {

ostringstream oss;

// 追加内容 oss.str("New content");

// 定位到行末 oss.seekp(0, ios::end);

// 替换内容 oss << " appended";

string result = oss.str(); oss.str("");

cout << result << endl;

return 0; }

# 输出结果

New content appended

3、流状态 操作成功

#include

#include

using namespace std;

int main() {

ostringstream oss;

// 成功写入操作 oss << "Hello";

if (oss.good()) { cout << "操作成功" << endl; }

if (oss.fail()) { cout << "操作失败" << endl; }

cout << "内容:" << oss.str() << endl;

return 0; }

# 输出结果

操作成功 内容:Hello

操作失败

#include

#include

using namespace std;

int main() {

ostringstream oss;

// 模拟流错误 oss << "Hello"; oss.setstate(ios::failbit); oss << "Hello World";

if (oss.good()) { cout << "操作成功" << endl; }

if (oss.fail()) { cout << "操作失败" << endl; }

cout << "内容:" << oss.str() << endl;

return 0; }

# 输出结果

操作失败 内容:Hello

相关文章