相当于atoi

Man*_*uro 26 c++ atoi

是否有一个函数可以替换c ++中的atoi.我做了一些研究,没有找到任何替代它,唯一的解决方案是使用cstdlib或自己实现它

Dav*_*nck 18

如果您不想使用Boost,std::stoi则为字符串添加C++ 11 .所有类型都存在类似的方法.

std::string s = "123"
int num = std::stoi(s);
Run Code Online (Sandbox Code Playgroud)

atoi与之不同,如果不能进行转换,invalid_argument则抛出异常.此外,如果值超出int的范围,out_of_range则抛出异常.


Arm*_*yan 10

boost::lexical_cast 是你的朋友

#include <string>
#include <boost/lexical_cast.hpp>

int main()
{
    std::string s = "123";
    try
    {
       int i = boost::lexical_cast<int>(s); //i == 123
    }
    catch(const boost::bad_lexical_cast&)
    {
        //incorrect format   
    }
}
Run Code Online (Sandbox Code Playgroud)

  • Armen:`boost::lexical_cast` 可能会抛出异常,所以用 try-catch 包围它以使其更完整。 (2认同)

小智 5

您可以使用Boost函数boost :: lexical_cast <>,如下所示:

char* numericString = "911";
int num = boost::lexical_cast<int>( numericString );
Run Code Online (Sandbox Code Playgroud)

此处可以找到更多信息(最新的Boost版本1.47)。记住要适当地处理异常。