我需要將整數轉換爲Glib :: ustring,但我不想使用stringstream。並不是說stringstream有什麼固有的錯誤,但我不想另一個庫只是來完成這樣一個簡單的任務。將int轉換爲Glib :: ustring沒有stringstream
我的第一本能是用一個大的ol if語句編寫一個函數,或者爲每個數字使用一個字符數組,但必須有更清晰的東西。有其他選擇嗎?
我需要將整數轉換爲Glib :: ustring,但我不想使用stringstream。並不是說stringstream有什麼固有的錯誤,但我不想另一個庫只是來完成這樣一個簡單的任務。將int轉換爲Glib :: ustring沒有stringstream
我的第一本能是用一個大的ol if語句編寫一個函數,或者爲每個數字使用一個字符數組,但必須有更清晰的東西。有其他選擇嗎?
Glib::ustring
提供簡單的轉發不管你扔在一個format
靜態函數(最多8個參數,沒有可變參數模板但似乎)到一個字符串流和返回格式的字符串:
Glib::ustring text = Glib::ustring::format(123456);
由於C++ 11標準庫還具有用於將整數和浮點數一個重載to_string
方法
Glib::ustring text(std::to_string(123456));
再次,感謝。在封裝我自己的文件之前,我通過文檔挖掘了好幾個小時。滑潤是痛苦的,至少在我眼中是難以穿透的,而且沒有人似乎在網上提到過這一點。 Oy公司。 – CodeMouse92
@ JasonMc92顯然至少從2008年開始就已經存在了,所以這之前沒有人提到它,這確實有點奇怪。 – user657267
典型的文檔悖論:「它在(不可穿透的)文檔中,所以我們可以假設每個人都知道。」 >。> – CodeMouse92
編輯:此方法旨在完全避免STL,對於需要的情況下/庫。但是,Glib :: ustring確實使用STL,只是FYI。如果你使用其他一些自定義的字符串類,或者只是覺得自己像Glib一樣聰明,這可能仍然派上用場。
是的,它確實有可能,但它確實需要自定義功能。迄今爲止,這工作得很好,除了明顯的Glib :: ustring之外,不需要任何其他庫。你可以替換任何其他支持char的字符串類,並相應地調整Glib :: ustring行。
Glib::ustring int_to_ustring(int num)
{
bool neg = false;
int sub = 0;
char digit;
//This is what we'll return.
Glib::ustring str = "";
//If number is 0, the math won't work. Just return the string "0".
if(num == 0)
{
str = "0";
return str;
}
//Else, if the number is negative...
else if(num < 0)
{
//Store that information and make the number positive.
neg = true;
num = abs(num);
}
//Determine place value.
int pv = 0;
do
{
//Divide by a power of ten and trunicate decimal.
sub = num/pow(10, pv);
//Increase pv.
pv++;
}
//If we got zero, then we're too large.
while(sub != 0);
//NOTE: The above seems to make the place value two-too-large?
//Loop backwards through the place values.
for(pv; pv >= 0; pv--)
{
sub = num/pow(10, pv);
num -= sub*(pow(10, pv));
if(sub < 0 || sub > 10)
{
//Throw an error. I'm just using this as a placeholder.
std::cout << "Something went really weird." << std::endl;
}
//The char code for the digit is always 48 more than the digit.
digit = sub + 48;
//If this isn't a leading zero...
if(!(str == "" && digit == '0'))
{
//This is the best way to push a char to a ustring.
str.insert(str.end(), digit);
}
}
//If that number was negative, insert the negative sign.
if(neg)
str.insert(str.begin(), '-');
return str;
}
(順便提一下,提出改善建議,歡迎!我希望讓這個更有效呢。)
當我找到時間時,我會更新我的文章,但是USENET上的Christian Gollwitzer指出了更有效的解析數字的方法。人們只需要扭轉它們。 'if(i <0){print「 - 」; I = -i} I = 12345678 而I { 打印則i%10 I = I/10 }' – CodeMouse92
'油嘴:: ustring STR(STD :: to_string(123456));' – user657267
好了,這也是一個令人印象深刻的解決方案,但它確實還需要一個STL庫,其中一些可能不希望。感到驚訝的是,之前沒有人在網上提到過。這是一個多年來圍繞網絡的話題,每個人都說使用stringstream>。< – CodeMouse92
我對'ustring'不熟悉,但''format'函數不會這樣做嗎? 'ustring text = ustring :: format(123456);' – user657267