Я пытаюсь преобразовать treePtr->item.getInvest()
, который содержит строку целого числа. Это возможно?конвертировать строку указателя в целое число
ответ
#include <sstream>
// ...
string str(*(treePtr->item.getInvest())); // assuming getInvest() returns ptr
istringstream ss(str);
int the_number;
ss >> the_number;
Да, это сработало, спасибо –
Он работает, но он неэффективен - есть по крайней мере одно распределение кучи и свободное там, которое вполне может застрять в мьютексе, если ваша программа в многопоточном режиме. Вы делаете это один раз, или миллионы раз? –
wilhelmtell: Просто потому, что мы пишем C++, это не значит, что все должно быть классом. Преждевременная оптимизация может быть корнем всего зла, но умышленный выбор дополнительной работы является извращенным. –
Лучше использовать strtol()
, чем беспорядок вокруг с потоками.
const char* s = treePtr->item.getInvest();
const char* pos;
long the_number = ::strtol(s,&pos,10);
if(pos!=s)
// the_number is valid
strtol()
является лучшим выбором, поскольку он дает представление о том число, возвращаемое является действительным или нет. Кроме того, он избегает выделения на кучу, поэтому он будет работать лучше. Если вам просто нужен номер, и вы с радостью принимаете нуль вместо ошибки, просто используйте atol()
(это всего лишь тонкая обертка вокруг strtol
, которая возвращает нуль при ошибке).
«Лучше использовать strtol» ... почему? –
Потоки - это «путь на С ++». Я предпочитаю, чтобы он беспокоился о том, чтобы все детали, связанные с строками C, были правильными. – mch
Shmoopty: справедливый вопрос. Я добавил свои аргументы в ответ. –
если у вас есть доступ к Форсирование:
int number= boost::lexical_cast<int>(treePtr->item.getInvest());
http://stackoverflow.com/questions/1243428/convert-string-to-int-with-bool-fail-in-c/1243444#1243444 – AraK