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;
    }

     

  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/byteHuang/p/9968167.html
Copyright © 2011-2022 走看看