C++ostringstream用法

C++中的ostringstream是一个字符串流类,它允许将各种类型的数据插入到一个字符串中,并且能够方便地进行格式化输出。ostringstream类提供了一些函数,比如str()函数、clear()函数等,它们可以用来获取字符串、清空字符串等操作。本文将详细介绍C++ostringstream的用法及实例。

一、ostringstream的基本用法

首先,我们需要包含头文件。然后,我们需要创建一个ostringstream对象,它可以用来进行字符串的插入和获取操作。

下面是一个简单的例子,展示了ostringstream的基本用法:

```

#include

#include

using namespace std;

int main()

{

ostringstream oss;

oss << "Hello, ";

oss << "World!";

string str = oss.str();

cout << str << endl; // 输出:Hello, World!

return 0;

}

```

该程序首先创建了一个ostringstream对象oss,然后使用<<运算符将两个字符串插入oss中。最后,使用str()函数获取oss中的字符串,并将结果赋值给了一个string类型的变量str。

二、ostringstream格式化输出

ostringstream提供了很多格式化输出函数,可以将各种类型的数据以指定格式输出到字符串中。下面列举了一些常用的格式化输出函数:

1. setprecision(int n):设置浮点数的输出精度为n位。

2. setw(int n):设置字段宽度为n位。如果输出的字符串长度小于n,则在左侧补空格,否则不进行填充。

3. setfill(char c):设置填充字符为c。如果字段宽度为n,而实际输出的字符串长度小于n,则使用字符c进行填充。

4. setiosflags(ios::flags f):设置各种标志,比如左对齐、右对齐、十六进制等等。

下面是一个例子,演示了如何使用setprecision、setw、setfill进行格式化输出:

```

#include

#include

#include

using namespace std;

int main()

{

double fvalue = 3.14159265358979323846;

int ivalue = 12345;

ostringstream oss;

oss << setiosflags(ios::fixed) << setprecision(2) << fvalue << "\n";

oss << setw(10) << setfill('*') << ivalue << "\n";

oss << hex << ivalue << "\n";

string str = oss.str();

cout << str << endl;

return 0;

}

```

该程序对一个双精度浮点数fvalue和一个整数ivalue进行了格式化输出。首先使用setiosflags(ios::fixed)和setprecision(2)函数将fvalue格式化为两位小数。然后,使用setw(10)和setfill('*')函数将ivalue格式化为宽度为10的字符串,并使用字符*进行填充。最后,使用hex函数将ivalue转换为十六进制字符串。程序输出如下:

```

3.14

****12345

3039

```

三、ostringstream案例说明

下面是一些常见的实际应用场景,说明如何使用ostringstream来进行字符串的插入和格式化输出。

1. 将多个字符串连接为一个字符串

```

#include

#include

using namespace std;

int main()

{

string s1 = "Hello, ";

string s2 = "World!";

ostringstream oss;

oss << s1 << s2;

string s3 = oss.str();

cout << s3 << endl;

return 0;

}

```

该程序使用ostringstream将两个字符串s1和s2连接为一个字符串s3。结果输出:Hello, World!。

2. 将数字转成字符串

```

#include

#include

using namespace std;

int main()

{

int i = 123;

double d = 3.14;

ostringstream oss;

oss << i << " " << d;

string s = oss.str();

cout << s << endl;

return 0;

}

```

该程序使用ostringstream将一个int类型的变量i和一个double类型的变量d转成一个字符串s。结果输出:123 3.14。

3. 格式化输出日期时间

```

#include

#include

#include

#include

#include

using namespace std;

using namespace std::chrono;

int main()

{

auto now = system_clock::now();

time_t time_now = system_clock::to_time_t(now);

ostringstream oss;

struct tm *ptm = localtime(&time_now);

oss << put_time(ptm, "%Y-%m-%d %H:%M:%S");

string s = oss.str();

cout << s << endl;

return 0;

}

```

该程序使用ostringstream输出当前日期时间。使用system_clock::now()函数获取当前时间戳,然后使用system_clock::to_time_t()函数将时间戳转成time_t类型。接着,使用localtime()函数将time_t类型的时间转成struct tm类型。最后,使用put_time()函数将struct tm类型的时间格式化成字符串。该程序输出当前日期时间的字符串。例如,结果可能是:2022-02-22 17:25:31。

综上所述,C++ostringstream是一个非常方便的字符串流类,可以将各种类型的数据插入到一个字符串中,并且能够方便地进行格式化输出。通过对ostringstream的使用方法及实例的介绍,相信读者已经对该类有了更深入的了解。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(21) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部