2009-12-31 167 views
4

我對語言環境特定的轉換不是很熟悉,所以我可能會在此處使用錯誤的術語。這是我想要發生的事情。更改字符串語言環境

我想編寫一個函數

std::string changeLocale(const std::string& str, const std::locale& loc) 

這樣,如果我調用該函數如下:

changeLocale(std::string("1.01"), std::locale("french_france")) 

輸出字符串將是 「1,01」

感謝你的幫助!

+0

沒有「字符串區域設置」這樣的東西。語言環境是一組反映用戶語言和文化的格式規則和其他參數。一個字符串是一系列字符。從其他數據中創建字符串時,可以使用區域設置。一旦創建,就沒有與之關聯的區域設置。 – 2016-10-06 12:37:56

回答

6

像這樣的東西應該做的伎倆

#include <iostream> 
#include <sstream> 
#include <locale> 
int main (int argc,char** argv) { 
    std::stringstream ss; 
    ss.imbue(std::locale("fr_FR.UTF8")); 
    double value = 1.01; 
    ss << value; 
    std::cout << ss.str() << std::endl; 
    return 0; 
}    

應該給你的1,01輸出(至少它在G ++)。您可能不得不擺弄語言環境規範,因爲它非常特定於平臺。

+2

+1用於提及語言環境的平臺特定性質。 – 2009-12-31 17:45:30

+0

謝謝傑夫,這對VS2008的數字值技巧。我不得不像你說的那樣擺弄語言環境規範;我唯一可以工作的是 std :: locale(「french_france」) 無論如何,這個解決方案只適用於數值數據。如果我的輸入字符串是「我的體重是200.5磅」而我希望輸出是「我的體重是200.5磅」?這可能嗎? – Praetorian 2009-12-31 18:10:43

+0

那麼,200.5是一個數字吧?或者我誤解了你的問題? – 2009-12-31 18:22:26