📜  C ++中的格式化I / O

📅  最后修改于: 2021-05-31 23:25:42             🧑  作者: Mango

C++可帮助您格式化I / O操作,例如确定小数点后要显示的位数,指定基数等。

例子:

  • 如果我们想添加+符号作为out输出的前缀,则可以使用格式来做到这一点:
    stream.setf(ios::showpos)  
    If input=100, output will be +100 
  • 如果我们要在输出中添加尾随零的输出以在需要时使用格式显示:
    stream.setf(ios::showpoint) 
    If input=100.0, output will be 100.000

注意:这里的流是指C++中定义的流,例如cin,cout,cerr,clog。

有两种方法可以这样做:

  1. 使用ios类或各种ios成员函数。
  2. 使用机械手(特殊功能)
  1. 使用ios成员进行格式化:

    流具有格式标志,该标志控制格式的格式,这意味着使用此setf函数,我们可以设置标志,以允许我们以特定格式显示值。 ios类声明了一个称为fmtflags的位掩码枚举,其中定义了值(showbase,showpoint,oct,hex等)。这些值用于设置或清除格式标志。

    很少有标准的ios类函数是:

    1. width(): width方法用于设置所需的字段宽度。输出将以给定的宽度显示
    2. precision(): precision方法用于将小数点的数量设置为浮点值
    3. fill(): fill方法用于设置字符以填充字段的空白
    4. setf(): setf方法用于设置各种标志以格式化输出
    5. unsetf(): unsetf方法用于删除标志设置

    在职的:

    #include
    using namespace std;
      
    // The width() function defines width 
    // of the next value to be displayed 
    // in the output at the console.
    void IOS_width()
    {
        cout << "--------------------------\n";
        cout << "Implementing ios::width\n\n";
          
        char c = 'A';
           
        // Adjusting width will be 5.
        cout.width(5);
           
        cout << c <<"\n";
           
           
        int temp = 10;
           
        // Width of the next value to be
        // displayed in the output will 
        // not be adjusted to 5 columns.
        cout<
    输出:
    --------------------------
    Implementing ios::width
    
        A
    10
    --------------------------
    
    --------------------------
    Implementing ios::fill
    
    *********a
    ****1
    --------------------------
    
    --------------------------
    Implementing ios::setf
    
    +100 +200
    --------------------------
    
    --------------------------
    Implementing ios::unsetf
    
    200.000
    --------------------------
    
  2. 使用操纵器进行格式化
    更改流的格式参数的第二种方法是使用称为操纵器的特殊功能,这些特殊功能可以包含在I / O表达式中。
    标准操纵器如下所示:
    1. boolalpha: C++中的流操纵器的boolalpha操纵器用于打开bool alpha标志
    2. dec: C++中的流操纵器的dec操纵器用于打开dec标志
    3. ENDL:在C++流操纵的操纵器ENDL用于输出一个字符。
    4. 和: C++中的流操纵器的and操纵器用于刷新流
    5. Ends: C++中的流操纵器的ends操纵器用于输出null
    6. 固定: C++中的流操纵器的固定操纵器用于打开固定标志
    7. flush: C++中的流操纵器的flush操纵器用于刷新流
    8. hex: C++中的流操纵器的十六进制操纵器用于打开hex标志
    9. internal :C++中的流操纵器的内部操纵器用于打开内部标志
    10. left :C++中的流操纵器的左操纵器用于打开left标志
    11. noboolalpha :C++中的流操纵器的noboolalpha操纵器用于关闭bool alpha标志
    12. noshowbase :C++中的流操纵器的noshowbase操纵器用于关闭Shower标志
    13. noshowpoint :C++中的流操纵器的noshowpoint操纵器用于关闭显示点标志
    14. noshowpos :C++中的流操纵器的noshowpos操纵器用于关闭showpos标志
    15. noskipws :C++中的流操纵器的noskipws操纵器用于关闭skipws标志
    16. nounitbuf :C++中的流操纵器的nounitbuf操纵器用于关闭unit buff标志
    17. nouppercase :C++中的流操纵器的nouppercase操纵器用于关闭大写标志
    18. oct :C++中的流操纵器的oct操纵器用于打开oct标志
    19. resetiosflags(fmtflags f) :C++中的流操纵器的resetiosflags操纵器用于关闭f中指定的标志
    20. right :C++中的流操纵器的正确操纵器用于打开正确的标志
    21. 科学:C++中的流操纵器的科学操纵器用于打开科学标记
    22. setbase(int base) :C++中的流操纵器的setbase操纵器用于将基数设置为base
    23. setfill(int ch) :C++中的流操纵器的setfill操纵器用于将填充字符设置为ch
    24. setiosflags(fmtflags f): C++中的流操纵器的setiosflags操纵器用于打开f中指定的标志
    25. setprecision(int p): C++中的流操纵器的setprecision操纵器用于设置精度的位数
    26. setw(int w): C++中的流操纵器的setw操纵器用于将字段宽度设置为w
    27. showbase :C++中的流操纵器的showbase操纵器用于打开showbase标志
    28. showpoint :C++中的流操纵器的showpoint操纵器用于打开show point标志
    29. showpos :C++中的流操纵器的showpos操纵器用于打开showpos标志
    30. skipws :C++中的流操纵器的skipws操纵器用于打开skipws标志
    31. unitbuf :C++中的流操纵器的unitbuf操纵器用于打开unitbuf标志
    32. uppercase :C++中的流操纵器的大写操纵器用于打开大写标志
    33. ws :C++中的流操纵器的ws操纵器用于跳过前导空白

    要访问带有参数的操纵器(例如setw()),必须在程序中包含“ iomanip”头文件。

    例子:

    #include 
    #include 
    using namespace std;
      
    void Example()
    {
        // performs ssame as setf( )
        cout << setiosflags(ios::showpos);
        cout << 123<<"\n";
          
        // hexadecimal base (i.e., radix 16)
        cout << hex << 100 << endl; 
          
        // Set the field width
        cout << setfill('*') << setw(10) << 2343.0; 
    }
      
    int main()
    {
        Example();
        return 0;
    }
    
    输出:
    +123
    64
    *****+2343
    

    机械手setiosflags()。

想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”