Více na
Nejjednodušší způsob převodu int na řetězec v jazyce C++
Jaký je nejjednodušší způsob převodu z int
na ekvivalentní string
v C++. Znám dvě metody. Existuje nějaký jednodušší způsob?
(1)
int a = 10;
char *intStr = itoa(a);
string str = string(intStr);
(2)
int a = 10;
stringstream ss;
ss << a;
string str = ss.str();
1473
3
Po několika letech jsme navázali na diskusi s @v.oddou a C++17 konečně přinesl způsob, jak provést původně typové řešení založené na makrech (zachované níže) bez ošklivosti maker.
Pravděpodobně nejběžnějším způsobem je zabalení druhé volby do šablony s názvem
lexical_cast
, jako je například šablona v Boost, takže váš kód vypadá takto:Jednou z příjemných vlastností tohoto postupu je, že podporuje i jiná odhození (např. v opačném směru funguje stejně dobře).
Všimněte si také, že ačkoli Boost lexical_cast začínal jako pouhý zápis do řetězcového proudu a následné extrahování zpět z proudu, nyní má několik doplňků. Především byly přidány specializace pro poměrně dost typů, takže pro mnoho běžných typů je podstatně rychlejší než použití stringstreamu. Za druhé nyní kontroluje výsledek, takže (například) při převodu z řetězce na
int
může vyhodit výjimku, pokud řetězec obsahuje něco, co se naint
převést nedalo (např.1234
by se povedlo, ale123abc
by vyhodilo).Od verze C++11 existuje funkce
std::to_string
přetížená pro celočíselné typy, takže můžete použít kód jako např:Standard je definuje jako ekvivalentní převodu pomocí
sprintf
(s použitím převodního specifikátoru, který odpovídá zadanému typu objektu, například%d
proint
) do bufferu dostatečné velikosti a následnému vytvořenístd::string
z obsahu tohoto bufferu.Pokud vím, tak v čistém C++ ne. Ale malá modifikace toho, co jste zmínil
by měla fungovat, a je docela krátká.