题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述: 输入一个字符串,包括数字字母符号,可以为空
输出描述: 如果是合法的数值表达则返回该数字,否则返回0
例如:
输入:+2147483647
1a33
输出:2147483647
0
我第一次提交的代码如下:
class Solution {
public:
int StrToInt(string str) {
int ret = 0;
int flag = 0;
int i = 0;
for( ; i < str.size(); i++){
if(str[i] == '+'){
flag = 1;
continue;
}
if(str[i] == '-'){
flag = -1;
continue;
}
if(str[i] <= '9' && str[i] >= '0'){
ret = 10 * ret + str[i] - '0';
}
else
return 0;
}
if(flag == -1)
return (0 - ret);
return ret;
}
};
在牛客上是显示通过的,但是我后来一想不对啊,如果是这么一串字符:“+-123”,本应该输出为0,但是实际会输出-123,这显然是不对的!
所以修改如下:
#include <iostream>
using namespace std;
class Solution {
public:
int StrToInt(string str) {
int ret = 0;
int flag1 = 0, flag2 = 0;
int i = 0;
for( ; i < str.size(); i++){
if(str[i] == '+'){
flag1 = 1;
continue;
}
if(str[i] == '-'){
flag2 = -1;
continue;
}
if(str[i] <= '9' && str[i] >= '0'){
ret = 10 * ret + str[i] - '0';
}
else
return 0;
}
if(flag1 == 1 && flag2 == -1)
return 0;
if(flag1 == 0 && flag2 == -1)
return (0 - ret);
return ret;
}
};
int main()
{
Solution s;
int ret = s.StrToInt("+-123");
cout << ret << endl;
return 0;
}
当然这个暂时我认为是正确的了。
这篇博客主要是记录:
1、早就看到有人说,正确通过所有用例,并不代表程序真的是完全正确的,果然是这样的。