zoukankan      html  css  js  c++  java
  • C++ 流控制函数setw()、setfill()、setbase()、setprecision()的使用

    头文件:

    #include <iostream>

    #include <iomanip>

    功能:

    std::setw :需要填充多少个字符,默认填充的字符为' '空格

    std::setfill:设置std::setw将填充什么样的字符,如:std::setfill('*')

    std::setbase(n):将输出数据转换为n进制

    std::setprecision():控制输出流显示浮点数的数字个数,C++默认的流输出数值有效位是6。

    #include <iostream>
    #include <iomanip>
    #include <sstream>
    #include <shlobj.h>
     
     
    //AppData
    std::wstring GetUserAppDataDir()
    {
        std::wstring appdata;
        wchar_t buffer[MAX_PATH];
        ::ZeroMemory(buffer, MAX_PATH*sizeof(wchar_t));
        if (::SHGetSpecialFolderPath(NULL, buffer, CSIDL_APPDATA, NULL))
            appdata = buffer;
     
        if (appdata.substr(appdata.length() - 1) != L"\")
        {
            appdata.append(L"\");
        }
        return appdata;
    }
     
    //生成日志文件路径
    std::wstring GetLogFileName()
    {
        SYSTEMTIME sysTime;
        ::GetLocalTime( &sysTime );
     
        std::wstringstream logFileName;
        logFileName << GetUserAppDataDir().c_str() << L"_"
            << sysTime.wYear << L"_"
            << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wMonth << L"_"
            << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wDay << L"_"
            << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wHour << L"_"
            << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wMinute << L"_"
            << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wSecond << L".log";
        return logFileName.str();
    }
    //字符串转数字
    template <class T> T to_num( const char* s )
    {
        T tmp(0);
        std::istringstream is(s);
        is >> std::setbase(10) >> tmp;//setbase(n):将输出数据转换为n进制
        if(is.fail())
        {
            return 0;
        }
        return tmp;
    };
    //测试代码
    int main()
    {
        int a = 1;
        int b = 2;
        char c = '$';
        //输出:   1
        std::cout << std::setw( 4 ) << a << std::endl;
        //输出:$$$1
        std::cout << std::setw( 4 ) << std::setfill( c ) << a << std::endl;
        //输出:$$$12
        std::cout << std::setw( 4 ) << std::setfill( c ) << a << b << std::endl;
        //输出日志文件路径
        std::wcout << GetLogFileName().c_str() << std::endl;
        std::cout << "
    " << std::endl;
        //std::setbase()的使用
        int num = to_num<int>("1234");
        long ldata = to_num<long>("123456");
        std::cout << num << std::endl;
        std::cout << ldata << std::endl;
        std::cout << "
    " << std::endl;
        std::cout << "255(2进制): " << std::setbase(2) << 255 << std::endl;//二进制输出
        std::cout << "255(8进制): " << std::setbase(8) << 255 << std::endl;//八进制输出
        std::cout << "255(16进制): " << std::setbase(16) << 255 << std::endl;//十六进制输出
        //setprecision()的作用: 控制输出流显示浮点数的数字个数(C++默认的流输出数值有效位是6)
        //如果与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。
        //setiosflags(ios::fixed)是用定点方式表示实数。
        //setiosflags(ios::scientific)是用指数方式表示实数。
        std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(8) << 12.123456 << std::endl;
        //如果与setiosflags(ios::scientific)合用,可以控制指数表示法的小数位数。
        //在用浮点表示的输出中,setprecision(n)表示有效位数。
        //在用定点表示的输出中,setprecision(n)表示小数位数。
        system("pause");
        return 0;
    }

     

  • 相关阅读:
    灵活的JavaScript(一)
    菜鸟快飞之JavaScript对象、原型、继承(三)
    菜鸟快飞之JavaScript对象、原型、继承(二)
    菜鸟快飞之JavaScript对象、原型、继承(一)
    undo清理 &redo 持久化
    mysql执行计划分析
    mysql5.6的统计信息
    pt-online-schema-change原理分析
    校验主从数据并修复
    使用伪master+binlog恢复数据
  • 原文地址:https://www.cnblogs.com/byteHuang/p/9968167.html
Copyright © 2011-2022 走看看