C 標準庫流輸出類的乙個使用問題

2021-06-13 10:37:59 字數 2424 閱讀 9663

今天遇到乙個問題,使用std::ostringstream拼裝字串,發現所有的整形列印出來後都是以逗號分隔的形式,即對於整數3600 輸出為: 3,600

每隔三位就會自動加上乙個逗號,這樣導致接受端不能將對應的字串成功轉換回整形,比如上面3,600通過atoi轉換就只能得到3了

上網了解了下,這個和程式執行環境的local的設定有關,c++中所有的輸入輸出流都使用std::local裡定義的規則來格式化不同資料,下表是支援的型別:

supported facets

std::

collate

<

char

>

std::

collate

<

wchar_t

>

std::

ctype

<

char

>

std::

ctype

<

wchar_t

>

std::

codecvt

<

char,char,mbstate_t>

std::

codecvt

<

char16_t,char,mbstate_t>

std::

codecvt

<

char32_t,char,mbstate_t>

std::

codecvt

<

wchar_t,char,mbstate_t>

std::

moneypunct

<

char

>

std::

moneypunct

<

char,true

>

std::

moneypunct

<

wchar_t

>

std::

moneypunct

<

wchar_t,true

>

std::

money_get

<

char

>

std::

money_get

<

wchar_t

>

std::

money_put

<

char

>

std::

money_put

<

wchar_t

>

std::

numpunct

<

char

>

std::

numpunct

<

wchar_t

>

std::

num_get

<

char

>

std::

num_get

<

wchar_t

>

std::

num_put

<

char

>

std::

num_put

<

wchar_t

>

std::

time_get

<

char

>

std::

time_get

<

wchar_t

>

std::

time_put

<

char

>

std::

time_put

<

wchar_t

>

std::

messages

<

char

>

std::

messages

<

wchar_t

>

如下**設定了數字輸出格式,以逗號表示小數點,且每三位數字以點號分隔:

class

my_punct

:public

std::

numpunct

virtual

char

do_thousands_sep

()const

virtual

std::

string do_grouping

()const

};int

main

()

通常,系統預設的local設定下,輸出的都是不帶逗號的,但需要防止使用了std::ostringstream的**位於動態庫中時,

呼叫動態庫的主程式可能會修改local設定,就導致了我之前碰到的問題。

C 用過載輸出乙個類

還記得剛開始學習c 時候,對於 cout 可以直接輸出各種型別的變數很好奇。畢竟是大一剛學完c語言,知道如果要輸出什麼資料肯定是要指定型別輸出的 printf 對於c 中的乙個變數 string str,使用 cout 可以直接輸出string,然而採用c中使用的 printf s str 是絕對無...

關於常量類使用的乙個問題。

系統有乙個常量類,用來儲存一些公用的不可變資訊,所有常量都被宣告為 public static final,但其中乙個常量,用於儲存系統的絕對路徑 webroot 這個常量需要在servlet啟動後載入,所以目前就不能把改常量宣告為final,但這存在乙個非常大的隱患,就是如果某程式設計師不小心 或...

C 使用靜態類成員時出現的乙個問題

開發環境 qt creator 4.8.2 編譯器 mingw 32 bit 在類中定義了乙個static data member class triangular void triangular gen elems to value int value while elems ix 1 value...