我通常在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++.
我可以快速看一下三个问题.
首先是那个
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.