#include<iostream> iostream的意思是标准输入输出流。#include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件。还要注意的是:在VC编程时要添加:
using namespace std;
<>和""有什么区别?<>和""表示编译器在搜索头文件时的顺序不同,<>表示从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录; ""是表示先从当前目录搜索,然后是系统目录和PATH环境变量所列出的目录。所以如果我们知道头文件在系统目录下就可以直接用<>,这样可以加快搜索速度
#include<iomanip> io代表输入输出,这个头文件是对输入输出的格式进行控制;主要是对cin,cout之类的一些操纵运算子。以下是常见的控制函数
dec置基数为10相当于“%d”
hex置基数为16相当于“%x”
oct置基数为8相当于“%o”
setfill(‘c’)设填充字符为c
setprecision(n)设置显示的有效数字为n
setw(n)设置域宽为n个字符
这个函数的意思是保证输出宽度为n,例如:
cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100<<endl;输出结果为:
--1-10100;默认的是右对齐;当输出长度大于3时,setw(3)不起作用。
setw:就是预设宽度;
setfill:在预设的宽度中如果存在没有用完的宽度的大小,则用设定的字符来填充;
setw和setfill只对紧跟的后面的一个输出有效。
setbase(int n):将数字转换为n进制;
cout<<setbase(8)<<setw(5)<<255<<endl;
结果为:空格空格377;
setprecision:可控制输出流显示浮点数的数字的个数;c++默认的输出数值的有效位是6.
如果setprecision(n)和setiosflags(ios::fixed)合用,则可以控制小数点右边数字的个数;setiosflags(ios::fixed)用定点的方式表示实数。如果与setiosflags(ios::scientific)合用,则可以控制指数表示法的小数点的位数。setiosflags(ios::scientific)表示 用指数的方式表示实数。setiosflags调用的格式和作用如下:
setiosflags(ios::fixed)固定的浮点显示
setiosflags(ios::scientific)指数表示
setiosflags(ios::left)左对齐setiosflags(ios::right)右对齐
setiosflags(ios::skipws)忽略前导空白
setiosflags(ios::uppercase)16进制大写输出
setiosflags(ios::lowercase)16进制小写输出setiosflags(ios::showpoint)强制显示小数点
setiosflags(ios::showpos)强制显示符号
程序实例:
#include<iostream>
#include<iomanip>
using
namespace
std;
int
main()
{
cout<<12345.0<<endl;
//输出"12345"
cout<<setiosflags(ios::fixed)<<setprecision(3)<<1.2345<<endl;
//输出"1.234"(遵循四舍六入五成双的原则,而不是四舍五入的原则)
cout<<resetiosflags(ios::fixed);
//需要用resetiosflags()函数清除前面的输出格式
cout<<setiosflags(ios::scientific)<<12345.0<<endl;
//输出"1.23e+004"
cout<<setprecision(3)<<12345.0<<endl;
//输出"1.23e+004"
return
0;
}
c++的标准库:sstream
sstream中包含了c++的三个输入输出流操作:ostringstream,istringstream,stringstream。
istringstream用于执行c++风格的串流出入操作;
ostringstream类用于执行c风格的串流的输出操作;
stringstream类同时支持c风格的串流输入输出操作。
istringstream类是从istream(输入流类)和stringstreambase(c++字符串流基类)派生而来,ostringstream是从
ostream(输出流类)和stringstreambase(c++字符串流基类)派生而来,stringstream则是从iostream类(标准输入输出流类)和stringstreambase(c++字符串流基类)派生而来。istringstream是由一个string对象构造而来,istringstream类从一个string类对象读取字符。istringstream的构造函数原型如下:
istringstream::istringstream(string str);
实例程序:
istringstream istr;
istr.str("1 56.7");
(上面也可以写成istringstream istr(“1 56.7”))
cout<<istr.str()<<endl;
int a;
float b;
istr >> a;
cout<<a<<endl;
istr>>b;
cout<<b<<endl;
程序解释:构造字符串流的时候,空格会成为字符串参数的内部分解,例子程序中对a b对象的赋值操作验证了这一点。字符串的空格成为了整形数据和浮点型数据的分界点,利用分界点获取的方法我们事实上完成了字符串到整形对对象与浮点型对象的拆分转换过程。
str()成员函数的使用可以让istringstream对象返回一个string字符串(cou<<istr.str());
ostringstream同样是由一个string对象构造而来,ostringstream类向一个string对象插入字符。
ostringstream的构造函数圆形如下:
ostringstream::ostringstream(string str);
示例程序:
ostringstream ostr;
//ostr.str("abs");
ostr.put('d');
ostr.put('c');
ostr<<"sd";
string gstr = ostr.str();
cout<<gstr;
可以通过put()或者左移操作符不断地向ostr插入字符或者字符串,通过str()函数返回经过增长过后字符串数据,需要注意的是,当构造对象的时候,对象内存中已经存在字符串数据的时候,那么增长操作不会从结尾开始增加,而是修改原有的数据,超出的部分增长。
stringstream适用于c++风格的字符串输入输出的。stringstream的构造函数
stringstream::stringstream(string str);
示例程序:
stringstream ostr("ccc");
ostr.put('d');
ostr.put('e');
ostr<<"ssd";
string gstr = ostr.str();
cout<<gstr<,endl;
char a;
ostr>>a;
cout<<a;
除此之外,stringstream类的对象还经常用来string与各种类型数据之间的转换。
stringstream sstr;
//实现int到string类型的转换
int a = 100;
string str;
sstr<<a;
sstr>>str;
sout<<str<<endl;
//string到char[]类型转换
sstr.clear();//如果想通过使用同一stringstream对象实现多种类型数据的转换,在每一次转换后都要使用clear函数。
重复使用stringstream对象的好处在于效率,stringstream对象的构造和析构函数通常是非常耗费CPU时间的。
string 那么= “adaf”;
char cname[23];
sstr<<name;
sstr>>cname;
cout<<cname;
基于stringstream的转换拥有类型安全和不会溢出的特性;相比于c库的转换,更加安全,自动和直接。