首页 » 编程之美 » 正文

[leetcode_8]String to Integer (atoi)

这个题真心想我理解了读题的重要性。
我就疯狂的WA啊。。。
题意很简单:
读入一个串,转化为int,如果越界,输出边界值。
但是需要注意+ – 符号
还需要值得注意的是:
先清空前面的所有空格,然后遇到第一个不是空格的字符开始识别,一直识别到不能识别为止。
但是特殊情况是:如果是‘ a123123123’这个串需要返回0
算法和数据结构不难,附上代码:

class Solution {
public:
    int atoi(const char <em>str) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        int i;
        for(i = 0;i &lt; strlen(str);i++)
        {
            if(str[i] != ' ')break;
        }
        if(!((str[i] &gt;= '0' &amp;&amp; str[i] &lt;= '9') || (str[i] == '+') || (str[i] == '-')))
            return 0;
        int start = -1;
        int end = -1;
        for(;i &lt; strlen(str);i++)
        {
            if((str[i] &gt;= '0' &amp;&amp; str[i] &lt;= '9') || (str[i] == '+') || (str[i] == '-'))
            {
                start = i;
                break;
            }
        }
        if(start == -1)
            return 0;
        for(i = start+1;i &lt; strlen(str);i++)
        {
            if(str[i] &lt; '0' || str[i] &gt; '9')
            {
                end = i - 1;
                break;
            }<br />
        }
        if(i == strlen(str))
        {
            end = i - 1;
        }
        int p = 1;
        if( str[start] == '-' || str[start] == '+')
        {
            if(str[start] == '-')
                p = -1;
            start++;
        }
        double ans = 0;
        int index = 0;
        for(i = end;i &gt;= start;i--)
        {
            ans += (str[i]-'0')</em>pow(10.0,index++);
        }
        ans = ans * p;
        if(ans &gt; 2147483647.0)
            return 2147483647;
        if(ans &lt; -2147483648.0)
            return -2147483648;
        return (int)ans;
    }
};

发表评论