把字符串转换成整数(通过了牛客上的所有用例并不代表程序没有问题)

题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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、早就看到有人说,正确通过所有用例,并不代表程序真的是完全正确的,果然是这样的。

猜你喜欢

转载自blog.csdn.net/baidu_35679960/article/details/80647975