C++流类库与输入输出

柔光的暖阳◎ 2021-12-21 02:07 290阅读 0赞

流是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会影响后面的值。

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int main()
  5. {
  6. double a[]={12.5,22.7,1269.33,33.99};
  7. string names[]={"dsad","tyhdf","hjhfgh","fweas"};
  8. for(int i=0;i<4;i++)
  9. {
  10. cout.width(10); //width函数控制输出宽度
  11. cout.fill('*'); //制定宽度不够的地方添加星号
  12. //cout<<setw(6)<<names[i]<<setw(10)<<a[i]<<endl;
  13. cout<<a[i]<<endl;
  14. }
  15. return 0;
  16. }

c:对其方式。

格式控制的话都是用setiosflags,其定义在头文件 ,用完之后需要用resetiosflags来关闭,它包含的参数有,可以用位或(|)运算符来组合。

* 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);

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int main()
  5. {
  6. double a[]={12.5,22.7,1269.33,33.99};
  7. string names[]={"dsad","tyhdf","hjhfgh","fweas"};
  8. for(int i=0;i<4;i++)
  9. {
  10. cout<<setiosflags(ios_base::left) //控制之后的输出左对齐
  11. <<setw(6)<<names[i]
  12. <<resetiosflags(ios_base::left) //关闭左对齐
  13. <<setw(10)<<a[i]<<endl;
  14. }
  15. cout<<endl<<endl<<endl;
  16. double tt=1583.66;
  17. int p=999;
  18. cout<<setiosflags(ios_base::scientific)<<setiosflags(ios_base::showpoint)
  19. <<tt
  20. <<resetiosflags(ios_base::hex)<<endl;
  21. return 0;
  22. }

d:精度 setprecision(值)来控制浮点数后后面输出几位。

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int main()
  5. {
  6. double a[]={12.522,22.7,1269.33,33.99};
  7. string names[]={"dsad","tyhdf","hjhfgh","fweas"};
  8. cout<<setiosflags(ios_base::fixed); //控制以定点格式输出
  9. for(int i=0;i<4;i++)
  10. {
  11. cout<<setiosflags(ios_base::left) //控制之后的输出左对齐
  12. <<setw(6)<<names[i]
  13. <<resetiosflags(ios_base::left) //关闭左对齐
  14. <<setw(10)<<setprecision(1)<<a[i]<<endl;
  15. }
  16. return 0;
  17. }
  18. #include <iostream>
  19. #include <iomanip>
  20. using namespace std;
  21. int main()
  22. {
  23. double a=12345.6789;
  24. int b=89985;
  25. cout.setf(ios_base::hex,ios_base::basefield); //改变ios_base::后面值控制进制
  26. cout<<b;
  27. return 0;
  28. }

2:字符串流函数。

将一个字符串转化为数:

  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. using namespace std;
  5. template <class T>
  6. inline T fromString(const string &str)
  7. {
  8. istringstream is(str);
  9. T v;
  10. is>>v;
  11. return v;
  12. }
  13. int main()
  14. {
  15. string s="465153";
  16. int a=fromString<int>(s);
  17. cout<<a<<endl;
  18. return 0;
  19. }

将一个值转化为string字符

  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. using namespace std;
  5. template <class T>
  6. inline string toString(const T &v)
  7. {
  8. ostringstream os;
  9. os << v;
  10. return os.str();
  11. }
  12. int main()
  13. {
  14. string s;
  15. int a=415641;
  16. s=toString(a);
  17. cout<<a<<endl;
  18. return 0;
  19. }

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读