C++的那些事:流与IO类
作者:RonnyYoung 发布时间:[ 2016/10/28 10:25:46 ] 推荐标签:C++ IO 流
7,使用字符流
sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,像string是一个IO流一样。
7.1 使用istringstream
很多时候我们需要逐行处理文本,而且需要对行内的单词进行单独分析,这时候使用istringstream是很方便的。
比如,我们程序需要一次读取一行文本,然后将其中的单词分别取出保存在一个vector中。
string line,word;
while (getline(cin, line))
{
vector<string> wordList;
istringstream lineText(line);
while (lineText >> word)
{
wordList.push_back(word);
}
}
7.2 使用ostringstream
当我们逐步构造输出时,希望后一起打印时,ostringstream是很有用的,它可以帮我们完成类似于itoa,ftoa这种数字转字符串的功能。
int num1 = 42;
double pi = 3.1415926;
string str = "some numbers";
ostringstream formatted;
formatted << str << pi << num1;
cout << formatted.str() << endl;
其中str成员函数是stringstream有几个特有操作之一。
string s;
stringstream strm(s);// 保存s的一个拷贝,此构造函数是explicit的。
strm.str(); // 返回strm所保存的string对象的拷贝。
strm.str(s); // 将s拷贝到strm中,返回void。
8,格式化输入输出 8.1 操纵符
标准库定义了一组操纵符用来修改流的状态,一个操纵符是一个函数或是一个对象,会影响流的状态,并能用作输入或输出运算符的运算对象,比如我们熟悉的endl,是一个操纵符。
操纵符用于两大类输出控制:控制数值的输出形式以及控制补白的数量和位置,大多数改变格式状态的操纵符都是设置/复原成对的:一个操纵符用来将格式状态设置为一个新值,而另一个用来将其复原,恢复为正常默认格式。
8.2 控制布尔值的格式
通过设置boolalpha可以将bool型变量的true输出为true或将false输出为false。可以设置noboolalpha来将内部状态恢复为默认格式。
// modify boolalpha flag
#include <iostream> // std::cout, std::boolalpha, std::noboolalpha
int main () {
bool b = true;
std::cout << std::boolalpha << b << ' ';
std::cout << std::noboolalpha << b << ' ';
return 0;
}
8.3 指定整形值的进制
默认情况是以十进制格式输出,我们可以设置不同的格式操纵符来改变输出整型值的进制。
oct:以八进制显示
hex:以十六进制显示
dec:以十进制显示
另外可以使用showbase操纵符来显式格式的前缀,8进制前有前导0,十六进制有前导0x。操纵符noshowbase恢复cout的状态,从而不再显示整型值的进制。有时候我们需要将16进制输出为大写如0X FF,可以用操纵符uppercase和nouppercase来控制流输出的大小写状态。
cout << uppercase << showbase << hex << 20 << 1024
<< nouppercase << noshowbase << dec << endl;
8.4 控制浮点数格式
打印精度是通过precision成员或使用setprecision操纵符来改变。其中precision是一个重载函数,一个版本接受int参数,将精度设置为此值,并返回旧精度值。另外一个版本不接受参数,返回当前精度值。setprecision操纵符接受一个参数,用来设置精度。
用scientific用来指定科学记数法,fixed指定为定点十进制,hexfloat指定为十六进制的浮点数。defaultfloat将流恢复到默认的状态。
设置showpoint可以用来强制打印小数。
8.5 输出补白
setw:指定下一个数字或字符串的小空间
left:表示左对齐输出。
right:表示右对齐输出,右对齐是默认格式。
internal:控制负数的符号的位置,它左对齐符号,右对齐值,用空格填满所有中间空间。
setfill:允许指定一个字符代替默认的空格来补白输出。
int i = -16;
double d = 3.14159;
cout << "i:" << setw(12) << i << ' '
<< "d:" << setw(12) << d << ' ';
cout << left
<< "i:" << setw(12) << i << ' '
<< "d:" << setw(12) << d << ' ';
cout << right
<< "i:" << setw(12) << i << ' '
<< "d:" << setw(12) << d << ' ';
cout << internal
<< "i:" << setw(12) << i << ' '
<< "d:" << setw(12) << d << ' ';
cout << setfill('#')
<< "i:" << setw(12) << i << ' '
<< "d:" << setw(12) << d << ' '
<< setfill(' ');
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南