C++将字符串转换为int函数

Dre*_*der 2 c++

我通常在python中编程,它内置了一个字符串到整数转换器但是当我使用C++它似乎不起作用所以我决定自己创建.这是我到目前为止制作的C++:

int strtoint(string str)
{
    int values [str.length()];
    int return_value = 0;

    for (int i=0; i < str.length(); ++i)
        if(str.at(str.length()-1-i) == '1')
            values[i] = 1;
        else if(str.at(str.length()-1-i) == '2')
            values[i] = 2;
        else if(str.at(str.length()-1-i) == '3')
            values[i] = 3;
        else if(str.at(str.length()-1-i) == '4')
            values[i] = 4;
        else if(str.at(str.length()-1-i) == '5')
            values[i] = 5;
        else if(str.at(str.length()-1-i) == '6')
            values[i] = 6;
        else if(str.at(str.length()-1-i) == '7')
            values[i] = 7;
        else if(str.at(str.length()-1-i) == '8')
            values[i] = 8;
        else if(str.at(str.length()-1-i) == '9')
            values[i] = 9;
    for (int i=0; i < str.length(); ++i)
        return_value += values[i]^(10*i);
    return return_value;
}
Run Code Online (Sandbox Code Playgroud)

我似乎得到了非常奇怪的答案,如"12"退货13"23"退货11.
我知道stoi但我更喜欢自己做,所以我可以学习C++.

Pet*_*ter 6

我可以快速看一下三个问题.

首先是那个

int values [str.length()];
Run Code Online (Sandbox Code Playgroud)

是无效的C++.它使用的是1999 C标准的一个特性,一些C++编译器支持它作为扩展,但它仍然不是有效的C++.

第二个是输入中缺少0s或错误(非数字字符)的处理.

第三是声明

return_value += values[i]^(10*i);
Run Code Online (Sandbox Code Playgroud)

^是C++中的按位XOR运算符.不是数学求幂.

其他一些小技巧.

您可以使用迭代器大大简化代码.

此外,对于所有标准字符集,罗马数字是连续的,从'0'.因此,一个简单的方法来一个数字转换成你想要的数值 digit - '0',这将转换'0'0,'1'1,...... '9'9.