Jak przekonwertować long
na string
w C++?Jak przekonwertować długą na ciąg w C++?
Odpowiedz
Można użyć stringstream.
#include <sstream>
// ...
std::string number;
std::stringstream strstream;
strstream << 1L;
strstream >> number;
Zwykle w bibliotece standardowej kompilatora znajduje się kilka zastrzeżonych funkcji języka C, które również to robią. Wolę jednak bardziej "przenośne" warianty.
Sposób C to zrobić z sprintf, ale to nie jest bardzo bezpieczne. W niektórych bibliotekach są nowe wersje, takie jak sprintf_s, które chroni przed przepełnieniami bufora.
Sprawdź std::stringstream
.
#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
To std :: string, a nie std :: String. – avakar
Dziękuję - problemy z palcem. –
Sposób, w jaki zwykle to robię jest z sprintf. Tak więc przez długi można wykonać następujące czynności zakładając, że jesteś na architekturze 32 bitowej:
char buf[5] = {0}; // one extra byte for null
sprintf(buf, "%l", var_for_long);
-1. Podczas gdy kompilator C++ skompiluje twój kod, nie powinien nazywać się C++. Dodatkowo wątpię, aby wystarczyło 5 znaków. – avakar
Prosimy nie zalecać sprintf w tym dniu i wieku. Czy nie mamy wystarczająco dużo exploitów przepełnienia bufora? Nie znaczy to, że ten kod wydaje się mieć jak napisano - ale nigdy nie wiesz, jak się zmienia. – philsquared
Phil, bufor przepełni się dla dowolnej liczby powyżej 10000. – avakar
int main()
{
long mylong = 123456789;
string mystring;
stringstream mystream;
mystream << mylong;
mystring = mystream.str();
cout << mystring << "\n";
return 0;
}
Istnieje kilka sposobów. Przeczytaj The String Formatters of Manor Farm, aby uzyskać szczegółowe porównanie.
To dobry artykuł. – Skurmedel
Tak. To jest przynajmniej trzeci raz, kiedy połączyłem go na SO. 8v) –
Dobrze, jeśli jesteś fanem kopiowania i wklejania, to jest tutaj:
#include <sstream>
template <class T>
inline std::string to_string (const T& t)
{
std::stringstream ss;
ss << t;
return ss.str();
}
Nie wiem, jakiego rodzaju jest to praca domowa, ale najprawdopodobniej nauczyciel nie chce odpowiedzieć, gdzie po prostu zadzwoń do "magicznej" istniejącej funkcji (mimo że jest to zalecany sposób), ale on chce sprawdzić, czy możesz to zaimplementować samodzielnie.
Dawno temu, mój nauczyciel zwykł mówić coś w stylu "Chcę sprawdzić, czy możesz samemu zaprogramować program, a nie, czy możesz go znaleźć w systemie". Cóż, jak się mylił;) ..
W każdym razie, jeśli nauczyciel jest taki sam, tutaj jest trudna droga to zrobić ..
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;
}
Można argumentować, że nie jest za pomocą std::string
"na własnej skórze", ale myślę, że to, co się liczy w rzeczywistym agorycie.
Tym razem dobrze jest korzystać z gotowych funkcji. Ale dzięki za ten pomysł. –
Naprawdę? Po prostu sprawdza, czy możesz gdzieś znaleźć funkcję? Tak, czasy się zmieniły;) .. – beef2k
@ beef2k Jeszcze lepiej - zauważa, że znam OOP, czuje się pod wrażeniem i nie sprawdza niczego innego. :) –
boost::lexical_cast<std::string>(my_long)
więcej tutaj http://www.boost.org/doc/libs/1_39_0/libs/conversion/lexical_cast.htm
+1, chociaż pierwotnie, leksyche_cast zrobił niewiele więcej niż przyjęty przykład stringstream (tylko bardziej zawinięty). – philsquared
Jedną z rzeczy, które nie są objęte ktokolwiek do tej pory, aby pomóc Ci myśleć o problem dalej, to w jakim formacie powinny długa odbioru, gdy jest rzutowane na sznurku.
Wystarczy spojrzeć na program arkusza kalkulacyjnego (np. Calc/Excel). Czy chcesz go zaokrąglić do najbliższego miliona, z nawiasami, jeśli jest ujemny, zawsze, aby pokazać znak ... Czy numer jest rzeczywiście reprezentacją czegoś innego, czy zamiast tego należy go pokazać w Oractal lub Hex?
Dotychczasowe odpowiedzi dały pewne domyślne wyniki, ale być może nie są prawidłowe.
Gdybym tego potrzebował, edytowałbym moje pytanie. :) –
Uwielbiam, podaję rozważną odpowiedź na to pytanie, aby pomóc w myśleniu o odrabianiu zadań domowych, zamiast udzielać odpowiedzi, która już tam była, a ja dostaję awans, w międzyczasie "std :: stringstream" ma upvote ... –
W C++ 11, istnieją funkcje std :: to_string i std :: to_wstring w <string>.
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);
Można użyć std::to_string w C++ 11
long val = 12345;
std::string my_val = std::to_string(val);
- 1. Jak przekonwertować tablicę ciągów na długą tablicę?
- 2. jak przekonwertować ciąg c na ciąg d?
- 3. Jak przekonwertować stringstream na ciąg w C++?
- 4. Jak przekonwertować ArrayList na ciąg znaków (ciąg []) w C#
- 5. Jak przekonwertować NSString na ciąg C?
- 6. Jak przekonwertować znak na ciąg?
- 7. jak przekonwertować NSinteger na ciąg
- 8. Jak przekonwertować char [] na ciąg w java?
- 9. Jak przekonwertować adres MAC (w tablicy) na ciąg w C?
- 10. Jak przekonwertować ciąg LPWSTR w C++
- 11. C++ przekonwertować z 1 znaku na ciąg?
- 12. Jak przekonwertować ciąg na CharSequence?
- 13. Jak przekonwertować BeautifulSoup.ResultSet na ciąg
- 14. Jak przekonwertować uint32 na ciąg?
- 15. Jak przekonwertować ciąg na NSData
- 16. Jak przekonwertować JSON na ciąg?
- 17. Jak przekonwertować ciąg na bitset?
- 18. Jak przekonwertować ciąg na długi
- 19. Jak przekonwertować ciąg na bajt w języku C#?
- 20. Jak przekonwertować ciąg pinyin na chiński w C#
- 21. Jak przekonwertować std :: thread :: id na ciąg w C++?
- 22. Jak przekonwertować ciąg na liczbę całkowitą w celu C?
- 23. Jak przekonwertować datetime z milisekund na ciąg w C#?
- 24. Jak przekonwertować ciąg na BigInteger?
- 25. Jak przekonwertować ciąg [] na ArrayList?
- 26. Jak przekonwertować Writer na ciąg
- 27. Jak przekonwertować ciąg na android.net.Uri
- 28. Jak przekonwertować ciąg znaków taki jak "Czerwony" na System.Windows.Media.Color?
- 29. Jak przekonwertować ciąg na liczbę w Perlu?
- 30. Jak przekonwertować ciąg na float w JavaScript?
tylko trochę nitpicking ... Nie nazwałbym tego "odlew". – kbyrd
@krbyrd możesz mi powiedzieć, dlaczego? Jestem sam .NETist, C++ nadal jest dla mnie niewygodny. :) –
Zgadzam się, to konwersja, a nie gips. – ralphtheninja