C++流类库与输入输出
流是c++中的输入输出的抽象。
1:输出流
a:控制输出的宽度。width()函数
cout.width(10); //width函数控制输出宽度
cout.fill(‘*‘); //制定宽度不够的地方添加星号
b:setw()函数,头文件
cout<<setw(6)<<names[i]<<setw(10)<<a[i]<<endl; //控制输出names宽度为6输出a的宽度为10
setw和width都不断的截取数值,如果数值位超过了制定宽度,将全部输出。还有它仅影响它后面跟的值,但是cout.fill会影响后面的值。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a[]={12.5,22.7,1269.33,33.99};
string names[]={"dsad","tyhdf","hjhfgh","fweas"};
for(int i=0;i<4;i++)
{
cout.width(10); //width函数控制输出宽度
cout.fill('*'); //制定宽度不够的地方添加星号
//cout<<setw(6)<<names[i]<<setw(10)<<a[i]<<endl;
cout<<a[i]<<endl;
}
return 0;
}
c:对其方式。
格式控制的话都是用setiosflags,其定义在头文件
* ios_base::skipws 在输入总跳过空格
* ios_base::left左对其,用字符填充右边的值
* ios_base::right右对齐值,用字符来填充左边值(默认对其方式)
* ios_base::intelnal在规定的宽度内,在指定的前缀符号之后,数值之前,插入指定的填充字符
* ios_base::dec以十进制形式格式化数值(默认进制)
* ios_base::oct以八进制形式格式化数值
* ios_base::hex以十六进制形式格式化数值
* ios_base::showbase插入前缀符号以表明帧数的数制
* ios_base::showpoint对浮点数制显示小数点和尾部0
* ios_base::uppercase 对于十六进制数值显示大写字母A-F,对于科学计数显示大写字母E
* ios_base::showpos对于非负数显示正号(“+”)
* ios_base::secientific以科学格式显示浮点数值
* ios_base::fixed以定点格式显示浮点数值(没有指数部分)。
* ios_base::unitbuf在每次插入之后转储并清除缓存区内容
控制进制的话我试了上面的还是输出十进制的,可以用这个:cout.setf(ios_base::oct,ios_base::basefield);
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a[]={12.5,22.7,1269.33,33.99};
string names[]={"dsad","tyhdf","hjhfgh","fweas"};
for(int i=0;i<4;i++)
{
cout<<setiosflags(ios_base::left) //控制之后的输出左对齐
<<setw(6)<<names[i]
<<resetiosflags(ios_base::left) //关闭左对齐
<<setw(10)<<a[i]<<endl;
}
cout<<endl<<endl<<endl;
double tt=1583.66;
int p=999;
cout<<setiosflags(ios_base::scientific)<<setiosflags(ios_base::showpoint)
<<tt
<<resetiosflags(ios_base::hex)<<endl;
return 0;
}
d:精度 setprecision(值)来控制浮点数后后面输出几位。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a[]={12.522,22.7,1269.33,33.99};
string names[]={"dsad","tyhdf","hjhfgh","fweas"};
cout<<setiosflags(ios_base::fixed); //控制以定点格式输出
for(int i=0;i<4;i++)
{
cout<<setiosflags(ios_base::left) //控制之后的输出左对齐
<<setw(6)<<names[i]
<<resetiosflags(ios_base::left) //关闭左对齐
<<setw(10)<<setprecision(1)<<a[i]<<endl;
}
return 0;
}
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a=12345.6789;
int b=89985;
cout.setf(ios_base::hex,ios_base::basefield); //改变ios_base::后面值控制进制
cout<<b;
return 0;
}
2:字符串流函数。
将一个字符串转化为数:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template <class T>
inline T fromString(const string &str)
{
istringstream is(str);
T v;
is>>v;
return v;
}
int main()
{
string s="465153";
int a=fromString<int>(s);
cout<<a<<endl;
return 0;
}
将一个值转化为string字符
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template <class T>
inline string toString(const T &v)
{
ostringstream os;
os << v;
return os.str();
}
int main()
{
string s;
int a=415641;
s=toString(a);
cout<<a<<endl;
return 0;
}
还没有评论,来说两句吧...