【发布时间】:2009-10-31 23:24:46
【问题描述】:
我正在尝试将包含字符串的treePtr->item.getInvest() 转换为整数。这可能吗?
【问题讨论】:
标签: c++ string integer pointers
我正在尝试将包含字符串的treePtr->item.getInvest() 转换为整数。这可能吗?
【问题讨论】:
标签: c++ string integer pointers
如果您有权使用 boost:
int number= boost::lexical_cast<int>(treePtr->item.getInvest());
【讨论】:
#include <sstream>
// ...
string str(*(treePtr->item.getInvest())); // assuming getInvest() returns ptr
istringstream ss(str);
int the_number;
ss >> the_number;
【讨论】:
使用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() 并不是其中之一。就像当 const char* 就足够了时,您不会使用 std::string。