【问题标题】:Convert std::string to integer将 std::string 转换为整数
【发布时间】:2012-09-19 15:43:11
【问题描述】:

我正在尝试将存储在std::vector 中的std::string 转换为整数并将其作为参数传递给函数。

这是我的代码的简化版本:

vector <string> record;
functiontest(atoi(record[i].c_str));

我的错误如下:

error: argument of type ‘const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const’ does not match ‘const char*’

我该怎么做?

【问题讨论】:

标签: c++ string int atoi


【解决方案1】:
#include <boost/lexical_cast.hpp>

functiontest(boost::lexical_cast<int>(record[i]));

【讨论】:

    【解决方案2】:

    使用 C++11:

    int value = std::stoi(record[i]);
    

    【讨论】:

    • 很有帮助。对于低于 C++11,有什么可靠的例子吗?
    • 读者注意:如果您不能 100% 确定 std::stoi 的输入将始终为有效整数,您需要为std::invalid_argument 设置try/catch
    • 还有std::out_of_range
    【解决方案3】:

    使用标准库中的字符串流。它更简洁,它更像是 C++ 而不是 C。

    int i3;
    std::stringstream(record[i]) >> i3; 
    

    【讨论】:

    • @BЈовић 非常好。不过对于 C++11 以后的版本
    • 我想它一定像任何流一样sloooow
    • @Kip9000 在我看来这是一个糟糕的建议。 std::stoi 更适合用于转换。它清晰得多,速度也快得多。很抱歉,由于我的投票已锁定,因此我无法恢复投票。
    • @javapowered:那是针对 C++11 的……正如它在 cmets 中所说的那样,但在您发表评论之前。
    【解决方案4】:
    record[i].c_str
    

    不一样

    record[i].c_str()
    

    您实际上可以从错误消息中得到:该函数需要一个const char*,但是您提供了一个const char* (std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;::)()const 类型的参数,它是一个指向类std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; 的成员函数的指针,它返回一个const char* 并且不接受任何参数。

    【讨论】:

    • 我可以看到另一个答案更好,但我认为这个答案不值得一票...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2016-01-28
    • 1970-01-01
    相关资源
    最近更新 更多