今天遇到乙個問題,使用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...