преобразование целых в строку / конкатенация целых строк в C ++ - более компактные решения? - PullRequest
9 голосов
/ 20 декабря 2011

Как сделать целочисленное преобразование строк - в интернете уже много раз отвечали ... однако я ищу самый компактный "C ++ - способ" сделать это.

Так как вы 'в состоянии объединять строки с помощью оператора перегруженного +, было бы предпочтительно иметь возможность что-то делать в соответствии с конкатенацией python-ish x = (stringVariable + str (intVariable)), но я не знаю, есть ликанонический способ сделать это в C ++.

Наиболее распространенные решения, которые я вижу:

stringstream: если возможно, было бы неплохо не иметь 3 строки кода (объявление, запись в поток, преобразование в строку) только дляобъединить несколько букв и цифр.

Итоа: это работает, но я ищу каноническое решение C ++.Кроме того, я думаю, что itoa технически нестандартен, хотя я могу ошибаться.

повысить формат / повысить лексическое приведение: это тоже работает, но разве в vanilla C ++ нет ничего, что могло бы работать?

Ответы [ 4 ]

17 голосов
/ 20 декабря 2011
#include <string>

Строка в целое число: int n = std::stoi(s);

Целое число в строку: std::string s = std::to_string(n);

4 голосов
/ 20 декабря 2011

C ++ 11 имеет std::to_string, но в C ++ 03 нет «решения для одного вызова функции».Также boost::lexical_cast (хотя и специализированные для определенных случаев) и std::to_string, в конечном счете, вызывают operator<<(std::ostream&,T) для любого T, который они должны преобразовать.Все дело в способности обрабатывать вещи в общем, и когда op<< уже существует, почему бы не использовать его повторно для создания строкового представления?

2 голосов
/ 20 декабря 2011

stringVariable + boost::lexical_cast<std::string>( intVariable ) бы справиться, но я не уверен, что это такая хорошая идея. Даже в Python что-то вроде '{}{:6f}'.format( stringVariable, intVariable ) будет гораздо более обычным.

0 голосов
/ 20 декабря 2011

Что случилось с 3 строками для конвертации? Если вам нужно использовать тот же тип конкатенации в любое время, просто поместите его в функцию, и все готово. Это было бы лучше, чем использовать странные решения.

...