stringstream常见用法介绍

mac2024-03-12  27

stringstream常见用法介绍

2018-09-10 23:20:54 liitdar 阅读数 8889更多

分类专栏: C/C++语言

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/liitdar/article/details/82598039

本文主要介绍 C++ 中 stringstream 类的常见用法。

1 概述

<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。

<sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库的数据类型转换而言,<sstream> 更加安全、自动和直接。

2 代码示例

2.1 数据类型转换

这里展示一个代码示例,该示例介绍了将 int 类型转换为 string 类型的过程。示例代码(stringstream_test1.cpp)如下:

 

#include <string>

#include <sstream>

#include <iostream>

#include <stdio.h>

 

using namespace std;

 

int main()

{

stringstream sstream;

string strResult;

int nValue = 1000;

 

// 将int类型的值放入输入流中

sstream << nValue;

// 从sstream中抽取前面插入的int类型的值,赋给string类型

sstream >> strResult;

 

cout << "[cout]strResult is: " << strResult << endl;

printf("[printf]strResult is: %s\n", strResult.c_str());

 

return 0;

}

编译并执行上述代码,结果如下:

2.2 多个字符串拼接

本示例介绍在 stringstream 中存放多个字符串,实现多个字符串拼接的目的(其实完全可以使用 string 类实现),同时,介绍 stringstream 的清空方法。

示例代码(stringstream_test2.cpp)如下:

 

#include <string>

#include <sstream>

#include <iostream>

 

using namespace std;

 

int main()

{

stringstream sstream;

 

// 将多个字符串放入 sstream 中

sstream << "first" << " " << "string,";

sstream << " second string";

cout << "strResult is: " << sstream.str() << endl;

 

// 清空 sstream

sstream.str("");

sstream << "third string";

cout << "After clear, strResult is: " << sstream.str() << endl;

 

return 0;

}

编译并执行上述代码,结果如下:

从上述代码执行结果能够知道:

可以使用 str() 方法,将 stringstream 类型转换为 string 类型;可以将多个字符串放入 stringstream 中,实现字符串的拼接目的;如果想清空 stringstream,必须使用 sstream.str(""); 方式;clear() 方法适用于进行多次数据类型转换的场景。详见示例2.3。

2.3 stringstream的清空

清空 stringstream 有两种方法:clear() 方法以及 str("") 方法,这两种方法有不同的使用场景。str("") 方法的使用场景,在上面的示例中已经介绍了,这里介绍 clear() 方法的使用场景。示例代码(stringstream_test3.cpp)如下:

 

#include <sstream>

#include <iostream>

 

using namespace std;

 

int main()

{

stringstream sstream;

int first, second;

 

// 插入字符串

sstream << "456";

// 转换为int类型

sstream >> first;

cout << first << endl;

 

// 在进行多次类型转换前,必须先运行clear()

sstream.clear();

 

// 插入bool值

sstream << true;

// 转换为int类型

sstream >> second;

cout << second << endl;

 

return 0;

}

编译并执行上述代码,结果如下:

注意:在本示例涉及的场景下(多次数据类型转换),必须使用 clear() 方法清空 stringstream,不使用 clear() 方法或使用 str("") 方法,都不能得到数据类型转换的正确结果。下图分别是未使用 clear() 方法、使用 str("") 方法时的运行结果:

 

最新回复(0)