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

标签 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;
}

我似乎得到了非常奇怪的答案,比如 "12" 返回 13"23" 返回 11 .
我知道 stoi,但我更喜欢自己制作,这样我就可以学习 C++。

最佳答案

我可以快速查看三个问题。

首先是那个

int values [str.length()];

不是有效的 C++。它使用 1999 C 标准中的一项功能,一些 C++ 编译器支持将其作为扩展,但它仍然不是有效的 C++。

第二个是缺乏对输入中的 0 或错误(非数字字符)的处理。

第三个是声明

return_value += values[i]^(10*i);

^ 是 C++ 中的按位异或运算符。不是数学求幂。

其他一些小技巧。

您可能可以通过使用迭代器大大简化您的代码。

此外,对于所有标准字符集,罗马数字都是连续的,从 '0' 开始。因此,将数字转换为您想要的数值的一种简单方法是 digit - '0',它将把 '0' 转换为 0 , '1'1, .... '9'9.

关于C++ 将字符串转换为 int 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934935/

相关文章:

c++ - Qt Timer API 是否停止并终止正在运行的插槽?我怎样才能让它等待定时器槽执行完成?

c++ - c++ 中的多态性与模板化类

c++ - 使用 memset() 为 const char* 分配新大小

c++ - g++ 模板错误 Small_size

c++ - 我如何让它调用正确的构造函数?

c++ - 从 std::string 中提取(第一个)UTF-8 字符

c++ - 通过转换第一个字段来安全访问父类

c++ - 如何从特定于平台的头文件中提取代码

c++ - 写入和读取图像 OpenGL 的内存屏障问题

c++ - 如何获取内核对象的安全描述符?