将指针字符串转换为整数

Posted

技术标签:

【中文标题】将指针字符串转换为整数【英文标题】:convert pointer string to integer 【发布时间】:2009-10-31 23:24:46 【问题描述】:

我正在尝试将包含字符串的treePtr->item.getInvest() 转换为整数。这可能吗?

【问题讨论】:

***.com/questions/1243428/… 【参考方案1】:

如果您有权使用 boost:

int number= boost::lexical_cast<int>(treePtr->item.getInvest());

【讨论】:

【参考方案2】:
#include <sstream>

// ...

string str(*(treePtr->item.getInvest())); // assuming getInvest() returns ptr
istringstream ss(str);
int the_number;
ss >> the_number;

【讨论】:

它可以工作,但效率低下 - 至少有一个堆分配和空闲,如果你的程序在多线程中,它很可能会卡在互斥锁中。您是这样做一次还是数百万次? wilhelmtell:仅仅因为我们正在编写 C++ 并不意味着一切都必须是一个类。过早的优化可能是万恶之源,但故意选择做额外的工作是不正当的。【参考方案3】:

使用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++ 方式”。我更喜欢它而不是担心正确获取与 C 字符串相关的所有细节。 Shmoopty:公平的问题。我已经在答案中添加了我的推理。 mch:流当然有自己的位置,但直接替代 strtol() 并不是其中之一。就像当 const char* 就足够了时,您不会使用 std::string 这个答案+1。流有它们的位置,但效率非常低。你可以为 boost::lexical_cast 使用 strtol 做一个模板特化

以上是关于将指针字符串转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

编写一个函数,将一个数字字符串转换为一个整数

C语言 将输入整数转换成字符串输出

将一个字符串转换为整数

C语言 如何将字符串转换成数字。不用指针和函数库,求解答

字符串转换成整数

c语言将日期转换为字符串 急求,谢谢!