long
'u C++ içinde string
'a nasıl dönüştürürüm?C++ 'da uzun bir dizgiye nasıl dönüştürebilirim?
cevap
Dize akışını kullanabilirsiniz.
#include <sstream>
// ...
std::string number;
std::stringstream strstream;
strstream << 1L;
strstream >> number;
Genellikle derleyici için standart kitaplıktaki bazı özel C işlevleri de vardır. Yine de daha "taşınabilir" varyantları tercih ederim.
Bunu yapmanın C yolu sprintf ile olurdu, ancak bu çok güvenli değil. Bazı kütüphanelerde, sprintf_s gibi arabellek taşmasına karşı koruma sağlayan yeni sürümler vardır.
std::stringstream
'a bakın.
#include <sstream>
....
std::stringstream ss;
ss << a_long_int; // or any other type
std::string result=ss.str(); // use .str() to get a string back
Std :: string, std :: String değil. – avakar
Teşekkür ederim - parmak sıkıntısı. –
Genelde yaptığım yöntem sprintf ile. Uzun yapabileceğin bir Yani şu bir 32 bit mimarisine olduklarını varsayarak:
char buf[5] = {0}; // one extra byte for null
sprintf(buf, "%l", var_for_long);
-1. Bir C++ derleyicisi kodunuzu derlerken, kesinlikle C++ olarak adlandırılmamalıdır. Ayrıca, 5 karakter yeterli olduğundan şüphe ediyorum. – avakar
Lütfen bu gün ve yaşlarda sprintf'i savunmayın. Yeterince tampon taşması istismarımız yok mu? Bu kodun yazılı olduğu gibi görünmüyor - ama hiçbir şeyin nasıl değiştiğini asla bilemezsiniz. – philsquared
Phil, arabellek 10000 üzerinde herhangi bir sayı için taşacak. – avakar
int main()
{
long mylong = 123456789;
string mystring;
stringstream mystream;
mystream << mylong;
mystring = mystream.str();
cout << mystring << "\n";
return 0;
}
çeşitli yolları vardır. Ayrıntılı bir karşılaştırma için The String Formatters of Manor Farm'u okuyun. işte burada sen, kopyala-yapıştır hayranı Eh eğer
Bu iyi bir yazı. – Skurmedel
Evet. Bu en azından üçüncü kez bunu SO üzerinde bağladım. 8v) –
bunun ne ödev ne tür bilmiyorum ama büyük olasılıkla öğretmen bir cevap istemiyor nerede sadece "büyülü" bir varolan işlevi çağırın (bunu yapmak için önerilen yol olsa da), ancak bunu kendi başınıza uygulayıp uygulayamayacağınızı görmek ister.
Geçmişte, öğretmenim "Sistemde bulabiliyor olsanız bile, kendi başınıza programlayıp programlayamayacağınızı görmek istiyorum" gibi bir şey söylerdi. Eh, ne kadar yanlış olduğunu;) ..
Neyse, öğretmen burada aynıdır bunu yapmak zor yoluise ..
std::string LongToString(long value) { std::string output; std::string sign; if(value < 0) { sign + "-"; value = -value; } while(output.empty() || (value > 0)) { output.push_front(value % 10 + '0') value /= 10; } return sign + output; }
Sen std::string
kullanarak olmadığını iddia olabilir "zor yol", ama asıl agorithmde neyin geçerli olduğunu tahmin ediyorum. Burada
Bu sefer hazır işlevleri kullanmak güzel. Ama bu düzgün fikir için teşekkürler. –
Gerçekten mi? Sadece bir yerde bir işlev bulabilir misin diye kontrol ediyor mu? Evet, zaman değişti;) .. – beef2k
@ beef2k Daha da iyisi - OOP'u bildiğimi fark eder, etkilendiğini hisseder ve başka hiçbir şey kontrol etmez. :) –
boost::lexical_cast<std::string>(my_long)
daha şimdiye kadar kimseye kapsamadığı şeylerden http://www.boost.org/doc/libs/1_39_0/libs/conversion/lexical_cast.htm
+1, ancak orijinal olarak, lexical_cast kabul edilen stringstream örneğinden biraz daha fazlasını yaptı (sadece daha fazla sarılmış). – philsquared
Bir, sorun daha da düşünmenize yardımcı olmak için, bir dizeye uzun almak döküm gerekirken Ne biçimidir.
Spreedsheet programına bir göz atın (Calc/Excel gibi). En yakın milyona yuvarlanır mı, eğer negatifse, her zaman işareti göstermek için köşeli parantezler… Sayının başka bir şeyin temsili olduğunu mu, yoksa Oractal veya Hex'te mi göstermelisiniz?
Şimdiye kadar verilen yanıtlar size bazı varsayılan çıktılar verdi, ancak belki de doğru olanları vermedi.
Buna ihtiyacım olursa, sorumu düzenlerdim. :) –
Sevgi, ben zaten orada olan cevap vermek yerine ödev hakkında düşünme yardımcı olmak için soruya verilen bir cevap vermek ve bir downvote aldım, bu arada 'std :: stringstream' bir ... –
C++ 11'de, <dize> dizgisinde std :: to_string ve std :: to_wstring işlevleri vardır.
string to_string(int val);
string to_string(long val);
string to_string(long long val);
string to_string(unsigned val);
string to_string(unsigned long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string (long double val);
Sen nitpicking ait C++ 11
long val = 12345;
std::string my_val = std::to_string(val);
- 1. C# 'da int'yi iki bayta nasıl dönüştürebilirim?
- 2. 64-bit C++ 'da uzun boylu (uzun) C++
- 3. Arabirim {} dizgiye nasıl dönüştürülür?
- 4. Unicode yolunu bir c dizesine nasıl dönüştürebilirim?
- 5. Dizgiye bir TM superScript eklenmesi
- 6. Java'da bir dizgiye yönlendiril stdout
- 7. Belirli bir türdeki dizgiye vektör nasıl dönüştürebilir
- 8. C++ 'da nasıl yazılır?
- 9. Uzun bir ondalık değeri C
- 10. Dikdörtgen'i bir RectangleF'ye nasıl dönüştürebilirim?
- 11. C# içindeki LINQ kullanarak bir Sözlük'ten SortedDictionary öğesine nasıl dönüştürebilirim?
- 12. StreamReader'ı bir dizeye nasıl dönüştürebilirim?
- 13. Objective-C, nasıl bir ikili bir int dönüştürebilirim?
- 14. Yaydaki dizgiyi dizgiye daldırın
- 15. XSD dosyasını C# Sınıfına nasıl dönüştürebilirim
- 16. C# temsilci işlevini VB.Net'e nasıl dönüştürebilirim?
- 17. Rota yolunu dizgiye dönüştürme
- 18. Dizgiye göre karakter dizisi dizisi
- 19. Nasıl full C# projeyi vb.net'e dönüştürebilirim?
- 20. C++ uzun zamandır taşan uzun süre önce
- 21. Windows'ta C++'da nasıl bir süreç oluşturulur?
- 22. C# 'da bir özellik adına `+` nasıl ekleyebilirim?
- 23. C++ 'da bir simge düğmesi nasıl yapılır
- 24. C++ 'da basit bir sınıf nasıl yazılır?
- 25. C++ 'da bir dosyanın ortasına nasıl yazılır?
- 26. Xcode C++'da derleyici nasıl değiştirilir?
- 27. Dizide Yığını Dizgiye Bölme
- 28. C/C++'da Windows Hizmeti Nasıl Oluşturulur?
- 29. Dizgiye dizgiyi bölme
- 30. C++ 'da ortalama nasıl edinilir?
Sadece biraz std::to_string kullanabilirsiniz ... Bu "döküm" demezdim. – kbyrd
@krbyrd bana nedenini söyleyebilir misin? Ben bir .NETist benim, C++ hala benim için rahatsızlık hissediyor. :) –
Kabul ediyorum, bu bir dönüşüm ve bir döküm değil. – ralphtheninja