[Leetcode]-String to Integer (atoi)

mplement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.

题目:字串转整数
注意:细节部分非常多,需要考虑很多情况
1、int溢出判断
2、正负号,具体情况见main函数中
3、含有空格的情况
结果:4ms

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <limits.h>
int myAtoi(char* str) {
   //"NULL"  "000234"  "+23" "-34" "+-34"  "    010"
    if(NULL == str )        
        return 0;    
    int sum  = 0.0;
    int f  = 0;
    int DIV = INT_MAX/10;
    while('\0' != *str)    
    {        
        if(*str == '+')
        {
            str++;
            if(*str < '0' || *str > '9') return 0;
            else    f = 0;
        }
        if(*str == '-')
        {
            str++;
            if(*str < '0' || *str > '9') return 0;
            else    f = 1;
        }

        if(*str >= '0' && *str<= '9' )
        {
            if(sum > DIV && f == 0) return INT_MAX;
            if(sum > DIV && f == 1) return -INT_MAX-1;

            sum = sum * 10.0;

            if(INT_MAX - *str + '0' < sum  && f == 0)       return INT_MAX;
            if((INT_MAX - (*str - '0') < sum ) && (f == 1)) return -INT_MAX-1;

            sum = sum + *str - '0';

            str++;
            if(*str == '\0')                    break;
            else if(*str < '0' || *str > '9')   break;
        }
        else
        {
            if(*str >= 'a' && *str <= 'z' )     break;
            str++;
        }
    }
    if(f) sum = -sum; 
    return sum;
}
int main()
{
    char *str = "0034";
    int r = myAtoi(str);
    printf("myAtoi str0 is : %d\n",r);

    char *str1 = "00";
    int r1 = myAtoi(str1);
    printf("myAtoi str1 is : %d\n",r1);

    char *str2 = "+23";
    int r2 = myAtoi(str2);
    printf("myAtoi str2 is : %d\n",r2);

    char *str3 = "-2345";
    int r3 = myAtoi(str3);
    printf("myAtoi str3 is : %d\n",r3);

    char *str4 = "+-23";
    int r4 = myAtoi(str4);
    printf("myAtoi str4 is : %d\n",r4);//  expected 0

    char *str5 = "    010";
    int r5 = myAtoi(str5);
    printf("myAtoi str5 is : %d\n",r5);

    char *str6 = "    +0104";
    int r6 = myAtoi(str6);
    printf("myAtoi str6 is : %d\n",r6);

    char *str7 = "    -0187";
    int r7 = myAtoi(str7);
    printf("myAtoi str7 is : %d\n",r7);//  expected -187

    char *str8 = "    -018a567";
    int r8 = myAtoi(str8);
    printf("myAtoi str8 is : %d\n",r8); //  expected -18

    char *str9 = "2147483648";
    int r9 = myAtoi(str9);
    printf("myAtoi str9 is : %d\n",r9); //  expected 2147483647  由于越界,只取最大

    char *str10 = "-2147483649";
    int r10 = myAtoi(str10);
    printf("myAtoi str10 is : %d\n",r10); //  expected -2147483648 

    char *str11 = "- 204";
    int r11 = myAtoi(str11);
    printf("myAtoi str11 is : %d\n",r11); //  expected 0  

    char *str12 = "b3424242";
    int r12 = myAtoi(str12);
    printf("myAtoi str12 is : %d\n",r12); //  expected 0  

    while(0);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值