《C和C++代码精粹》——1.9 格式化

本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第1章,第1.9节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.9 格式化

C和C++代码精粹
在程序清单1.8中ios::skipws是一个格式化标志的例子。格式化标志是位掩码值,该位掩码值可以通过成员函数setf来设置,也可用unsetf复位(见表1.1的完整描述)。

程序清单1.9的程序阐述了数字的格式化。标准流成员函数precision用来指定浮点值显示的小数位数。如果没有设置ios::showpoint标志,那么末尾的零不被显示。要用前置加号来打印正数,就用ios::showpos。在上例中想要以16进制形式显示x 和在指数形式中显示大写e,使用ios::uppercase。

程序清单1.7 计算文本文件中的字数

// wc.cpp:显示字的个数  
#include <iostream>  
using namespace std;  

main()  
{  
    const size_t BUFSIZ = 128;  
    char s[BUFSIZ];  
    size_t wc = 0;  

    while (cin >> s)  
        ++wc;  
    cout << wc << '\n';  
}  

//从"wc < wc.cpp”命令输出  
34

程序清单1.8 与程序copy1.cpp完全相同,但使用提取运算符读取空格

// copy3.cpp :用>>读取空格符  
#include <iostream>
using namespace std;  

main()  
{  
    char c;  

    //不要跳过空格符  
    cin.unsetf(ios::skipws);  

    while (cin >> c)  
        cout << c;  
}

表1.1 格式化标志
《C和C++代码精粹》——1.9 格式化

一些格式化选项可以具有一定范围的值。例如,用来确定显示整型数基数的ios::basefield可以被设置成10进制、8进制或16进制。(见表1.2中3种格式化域有效的描述)由于这些是位域而不是单个的位,可用带两个参数形式的setf来设置。例如,程序清单1.10的程序设置8进制数模式采用下面语句:

cout.setf ( ios::oct,ios::basefield );
用标志ios::showbase进行设置时,8进制以0开头,16进制以0x开头打印输出(或者以0X开头打印输出,如果ios::uppercase也被设置)。

程序清单1.9 描述数据格式化

// float.cpp :格式化真正的数字  
#include <iostream>  
using namespace std;  

main()  
{  
    float x = 12345.6789, y = 12345;  
    cout << x << ' ' << y << '\n';  

    //显示两个十位数  
    cout.precision(2);  
    cout << x << ' ' << y << '\n';  

    //显示末尾的零  
    cout.setf(ios::showpoint);  
    cout << x << ' ' << y << '\n';  

    //显示符号  
    cout.setf(ios::showpos);  
    cout << x << ' ' << y << '\n';  

    //返回符号和默认值的精度  
    cout.unsetf(ios::showpos);  
    cout.precision(0);  

//使用科学计数法  
    cout.setf(ios::scientific,ios::floatfield);  
    float z = 1234567890.123456;  
    cout << z << '\n';  
    cout.setf(ios::uppercase);  
    cout << z << '\n';  
}  

//输出:  
12345.678711 12345  
12345.68 12345  
12345.68 12345.00  
+12345.68 +12345.00  
1.234568e+09  
1.234568E+09

表1.2 格式化域

《C和C++代码精粹》——1.9 格式化

程序清单1.10 显示整数的基数

// base1.cpp :显示整数的基数  
#include <iostream>  
using namespace std;  

main()  
{  
    int x, ![image](https://yqfile.alicdn.com/d4dff4359c675def6e527db1695916fa57198610.png)
y, z;  

    cout << "输入三个整数: ";    
    cin >> x >> y >> z;  
    cout << x << ',' << y << ',' << z << endl;  

    //在不同基数中打印  
    cout << x << ',';  
    cout.setf(ios::oct,ios::basefield);  
    cout << y << ',';  
    cout.setf(ios::hex,ios::basefield);  
    cout << z << endl;  

//显示基数前缀  
    cout.setf(ios::showbase);  
    cout << x << ',';  
    cout.setf(ios::oct,ios::basefield);  
    cout << y << ',';  
    cout.setf(ios::hex,ios::basefield);  
    cout << z << endl;  
}  

//运行结果  
输入三个整数:10 010 0x10  
10,8,16  
10,10,10  
0xa,010,0x10

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

上一篇:二维费用背包


下一篇:七、Linux脚本进阶和进程管理