C++中的ostringstream是一个字符串流类,它允许将各种类型的数据插入到一个字符串中,并且能够方便地进行格式化输出。ostringstream类提供了一些函数,比如str()函数、clear()函数等,它们可以用来获取字符串、清空字符串等操作。本文将详细介绍C++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/
发表评论 取消回复