leetcode:String to Integer (atoi)

本文详细解析了atoi()函数的工作原理,并通过多个示例代码展示了如何正确处理各种边界情况,避免常见的编程错误。从理解函数的底层逻辑出发,逐步优化代码,最终实现对复杂输入的有效转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于以前对atoi()函数理解的不够透彻,导致中间出现了许多Wrang ANS,可以说是考虑的不够,但是没测试过那么多用例,怎么能写出各种情况下的处理方式呢?通过不断Wrang,终于知道了atoi()函数处理的各种情况,下面是写的两端代码,以供后面复习。

代码1:直接凭自己的感觉和错误提示编写,写的比较乱。

class Solution {
public:
    int atoi(const char *str) {
        
        if(str==NULL) return 0;
        long long number=0;
        int flag=1,f1=0;
        char c=' ';
        
        while(*str!='\0')
        {
            if(*str=='+')
            { 
               if(f1==0)  flag=1,f1=1;
               else return 0;
            }
            else if(*str=='-')
            { 
               if(f1==0) flag=-1,f1=1;  
               else return 0;
            }
            else if(*str==' ') 
            {
                if(c!=' ') break;
            }
            else if(*str>='0' && *str<='9')
            {
              number=number*10+(*str)-'0';
            }
            else break;
            c=*str;
            str++;
        }
        
        if(number > INT_MAX)  return flag == 1 ? INT_MAX : INT_MIN; 
        else return (int)number*flag;
    }
};
代码2:对所有错误用例总结后,恍然大悟,对原来代码做了改进。

class Solution {
public:
    int atoi(const char *str) {
      if(str==NULL) return 0;
      
      while(*str==' ') str++;
      
      int flag=1;
      if(*str=='+'|| *str=='-') 
      {
          if(*str=='+')  flag=1;
          else flag=-1;
          str++;
      }
      
      long long number=0;
      while(*str>='0' && *str<='9')
      {
          number=number*10+*str-'0';
          str++;
      }
      
      if(number>INT_MAX) return flag==1?INT_MAX:INT_MIN;
      else return (int)number*flag;
    }
};
学习的过程就是如此,不断错误和不断完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值