算法-把字符串转换成整数详解编程语言

/*
	[把字符串转换为整数]

    [题目]
	将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
	输入描述:输入一个字符串,包括数字字母符号,可以为空
	输出描述:如果是合法的数值表达则返回该数字,否则返回0

    [解析]
    没有什么算法。但要写 bug free 的代码还是有难度,边界条件要考虑清楚!!
    合理的字符,上溢,下溢。
*/

#include <iostream>
#include <vector>
#include <algorithm>
#include <limits>

using namespace std;

class Solution{
public:
    int StrToInt(string str){
        if(str.empty())
            return 0;
        // valid number : [+/-]number
        int icur = 0;

        // sign
        int sign = 1;
        if(str[icur] == '+' || str[icur] == '-'){
            if(str[icur] == '-')
                sign = -1;
            icur++;
        }

        // number
        int ansAbs = 0;
        for( ; icur<str.size(); icur++){
            int num = ctoi(str[icur]);
            if(num < 0) // nonvalid number
                return 0;
            long temp = sign*(ansAbs*10 + num);
            if(temp < numeric_limits<int>::min() || temp > numeric_limits<int>::max())
                return 0;
            ansAbs = temp / sign;
        }

        return ansAbs * sign;
    }

    int ctoi(char ch){
        if(ch>='0' && ch<='9')
            return ch-'0';
        else
            return -1;
    }
};

int main()
{
    return 0;
}

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/15266.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论