关于stringstream的用法
来源:互联网 发布:sql join union 编辑:程序博客网 时间:2024/04/29 13:42
在C++编程中,有一个不那么常用,但是其实很有用的输入转换工具类叫做stringstream. 说它不那么常用,是因为似乎一般的C++实战项目并不太会用到它;而说它很有用,一是因为在把stdin的输入转换成各种类型的变量时确实很方便很有用,二是因为在某些场合下,它确实很有用。什么场合呢?就是比如像LeetCode和HackerRank这样的编程训练网站。它们都是出一道题,让你写算法实现。等写完后,将你的代码直接嵌入到主程序当中,然后以若干个文件分别作为输入,检测输出(stdout)是否与目标文件(即期待结果)一致。这样就实现了代码检查的全自动化。看起来就像这样:
cat input_001.txt | your_program > output_001.txtdiff output_001.txt expected_001.txt以上的 "cat input_001.txt | your_program" 就是把input_001.txt的内容作为stdin的输入内容传递给your_program,而在your_program中需要对标准输入进行处理。这时使用的一般都是cin. 通过getline()函数将来自于标准输入的内容一行一行地分别获取,再做进一步的处理。
当获取到一行的内容时,这一行可能有若干部分组成,而每一部分可能希望被当成一个string或一个int型数字或一个double型的数字进行处理。那么怎样将一个string的内容(即这一行)转成你所希望的各个不同类型的变量呢?这就要用到stringstream了。具体语法使用,请看以下的实例程序。在该程序中,我们假设标准输入来的每一行都有至少4个部分组成,前2部分是int型数字,第3部分是double型数字,第4部分是一个普通的string。
#include <string>#include <sstream>#include <iostream>using namespace std;int main(){ string line; while (!cin.eof()) { int i1 = 0; int i2 = 0; double d3 = 0.1; string s4 = "Hello"; getline(cin, line); if (line.size() == 0) break; stringstream ss(line); ss >> i1 >> i2 >> d3 >> s4; cout << "i1 = " << i1 << ", i2 = " << i2 << ", d3 = " << d3 << ", s4 = " << s4 << endl; } return 0;}这个时候,如果输入是严格按照以上的 int int double string 的顺序进行的,那么一切OKay,我们的程序自然可以获得正确的4个变量。可是如果输入文件中是个“abc”这样的string,却希望被解析成int或double,会发生什么呢?请看下面的input.txt文件:
100 200 9.876 100abc def xyz 9.8761.20 2.10 100 abc100 200 300 0.99那么,输出是这样的:
i1 = 100, i2 = 200, d3 = 9.876, s4 = 100i1 = 0, i2 = 0, d3 = 0.1, s4 = Helloi1 = 1, i2 = 0, d3 = 0.1, s4 = Helloi1 = 100, i2 = 200, d3 = 300, s4 = 0.99由以上可见,在某些情况下的解析确实是不成功的。但是上面看着有些乱,笔者特地总结了一张表格如下:
这里的“原型“,指的就是在input.txt文件中,即在stdin中看起来“像”的那种类型;而这里的“转成”,指的就是在所需实现的C++程序中,用以接收解析结果的变量类型。
虽然这其中确实会有一些错误的情况,但还是可以通过stringstream来很方便地实现标准输入向目标变量的转换的。
本篇文章只是关于stringstream基本使用的一个简单介绍,貌似在一般情况下可能够用了。如还有更多要求,请查询stringstream的手册:http://en.cppreference.com/w/cpp/io/basic_stringstream
(完)
- 关于stringstream的用法
- 关于stringstream的用法
- 关于string和stringstream的用法
- stringstream的用法
- stringstream的用法
- stringstream的用法
- stringstream的用法
- stringstream的用法
- stringstream的用法
- stringstream的用法
- stringstream 的用法介绍
- stringstream的用法
- stringstream的用法
- stringstream 的用法
- stringstream 的用法介绍
- stringstream的用法
- Stringstream的用法
- stringstream的用法
- python numpy矩阵信息,shape,size,dtype
- struts2基于注解的action配置
- C语言中的=
- log4j的设置
- 指针变量和变量的指针
- 关于stringstream的用法
- UVAlive 6694 Toy Boxes(三分)
- oracle中merge的用法,以及各版本…
- ASBITSTREAM的用法,blob和char类…
- Ubuntu或Linux Mint上安装JDK8和JRE8
- 将xml格式的字符串转换为xml对象格…
- SDWebImage和AFNetWorking
- 修改mq的编码字符集标识
- mq命令大全