C++流中一些有用的预设格式

在C++中有一些十分有用的预设格式,可以方便我们在进行流输出时输出想要的格式,而不再需要printf或sprintf来进行格式化输出,更“C++”化。

头文件:<iostream>

函数1:ios_base& boolalpha(ios_base& str)

作用:把bool值用“ture”或"false"字符串输出

函数2:ios_base& noboolalpha(ios_base& str)

作用:把bool值不用字符串输出(即用整数输出)

示例1:bool c = false;
bool d = true;
cout << boolalpha << c << endl << noboolalpha << d << endl;

输出:false [换行] 1

示例2:bool c = false;
bool d = true;
stringstream ss;
ss << boolalpha << c << endl << noboolalpha << d << endl;
cout << ss.str();

输出:同上


函数3:dec

函数4:hex

函数5:oct

作用:分别按10进制、16进制、8进制输出

示例:int e = 123;
cout << dec << e << "-" << hex << e << "-" << oct << e << endl;

输出:123-7b-173


函数6:fixed 输出浮点数,小数点后保留5位,不足补0

函数7:scientific 科学计数法表示浮点数,小数点后保留5位,不足补0

函数8:hexfloat 按16进制输出小数

函数9:defaultfloat 默认小数输出格式,不设置格式标志时,默认使用该格式


函数10:internal

函数11:left

函数12:right

作用:在输出空间中,字符对齐方式:两端对齐,左端对齐,右端对齐

示例:左端对齐右端对齐比较好理解,主要是internal,在带符号数字输出时,符号在左端,字符在右端

int n = -77;
std::cout << "12345678" << endl;
std::cout.width(8); std::cout << std::internal << n << '\n';
std::cout.width(8); std::cout << std::left << n << '\n';
std::cout.width(8); std::cout << std::right << n << '\n';

输出:12345678

            -            77

            -77           

                       -77

如果是字符串,则internal也是右端对齐

char* n = "a b c";
std::cout << "12345678" << endl;
std::cout.width(8); std::cout << std::internal << n << '\n';
std::cout.width(8); std::cout << std::left << n << '\n';
std::cout.width(8); std::cout << std::right << n << '\n';

输出:|12345678|

            |        a  b  c|

            | a  b  c       |

            |      a  b  c  |


函数13:showbase

函数14:noshowbase

作用:是否显示数制符号,16进制显示0x,8进制显示0

示例:int n = 20;
std::cout << std::dec << std::showbase << n << '\n';
std::cout << std::dec << std::noshowbase << n << '\n';
std::cout << std::hex << std::showbase << n << '\n';
std::cout << std::hex << std::noshowbase << n << '\n';
std::cout << std::oct << std::showbase << n << '\n';
std::cout << std::oct << std::noshowbase << n << '\n';

输出:20  20  0x14 14 024 24


函数15:showpoint

函数16:noshowpoint

作用:是否显示小数点

函数17:showpos

函数18:noshowpos

作用:是否显示正数的符号 “+”


函数19:skipws

函数20:noskipws

作用:只能作用于输入流,输入时是否跳过空白符,如果是,则输入第一个不是空白符的字符,然后输入下一个不是空白符的字符,如果否,则每位空白符也被当做输入字符。

空白符包括制表符(Tab),回车,空格(blank space)

示例:char *n = " 1 2 3 ";
char a, b, c;
stringstream ss(n);
cout << ss.str() << endl;
ss >> skipws >> a >> b >> c;
cout << a << b << c <<endl;
ss.seekg(0);
ss >> noskipws >> a >> b >> c;
cout << a << b << c << endl;

输出:|  1  2  3  |

            |123|

            |  1  |

 
 

函数21:uppercase

函数22:nouppsercase

作用:英文字符大写或者小写

示例:std::cout << std::showbase << std::hex; std::cout << std::uppercase << 777777 << '\n'; std::cout << std::nouppercase << 777777 << '\n';

输出:|0XBDE31|

            |0xbde31|

 
 

有了这些格式,C++也可以输出接近于Java那么丰富的字符串了。结合stringstream,可以在内存中改变字符串的格式,比如全部大写或者全部小写,或者在数字前加上符号、进制。



猜你喜欢

转载自blog.csdn.net/blwinner/article/details/54193723