我通常在 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/