无法将字符/字符串转换为int

时间:2014-01-21 22:13:23

标签: c++

当我运行我的代码时,我在编译时遇到了这个错误:

# g++ -std=c++0x sixteen.cpp -O3 -Wall -g3 -o sixteen
sixteen.cpp: In function ‘int main()’:
sixteen.cpp:10: error: call of overloaded ‘stoi(char&)’ is ambiguous
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/basic_string.h:2565: note: candidates are: int std::stoi(const std::string&, size_t*, int) <near match>
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/basic_string.h:2626: note:                 int std::stoi(const std::wstring&, size_t*, int) <near match>

我查看了该错误,并按照此处其他问题的说明进行了操作,但在删除using namespace std;后仍然出现错误。为什么这仍然发生,我该怎么做才能摆脱它?

代码:

#include <iostream>
#include <string>

int main() {
    std::string test = "Hello, world!";
    std::string one = "123";

    std::cout << "The 3rd index of the string is: " << test[3] << std::endl;

    int num = std::stoi(one[2]);
    printf( "The 3rd number is: %d\n", num );

    return 0;
}

2 个答案:

答案 0 :(得分:9)

std::stoistd::string为参数,但one[2]char

解决此问题的最简单方法是使用数字字符保证具有连续值的事实,因此您可以这样做:

int num = one[2] - '0';

或者,您可以将数字提取为子字符串:

int num = std::stoi(one.substr(2,1));

另一种方法是,您可以使用构造函数构建std::string char以及char应出现的次数:

int num = std::stoi(std::string(1, one[2]));

答案 1 :(得分:-1)

您也可以使用在C ++ 11中添加的std :: to_string。采用基本类型的参数,并返回一个字符串。

http://en.cppreference.com/w/cpp/string/basic_string/to_string