zoukankan      html  css  js  c++  java
  • (剑指Offer)面试题49:把字符串转换为整数

    题目:

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。

    思路:

    考虑+、-、空格、非数字字符,以及溢出问题

    代码:

    #include <iostream>
    
    using namespace std;
    
    enum Status {kValid=0,kInvalid};
    int g_nStatus=kInvalid;
    
    long long StrToIntCore(const char* str,bool minus){
        long long num=0;
        int flag=minus?-1:1;
    
        while(*str!=''){
            if(*str>='0' && *str<='9'){
                num=num*10+flag*(*str-'0');
                if((!minus && num>0x7fffffff) || (minus && (signed int)num<0x80000000)){
                    num=0;
                    break;
                }
                str++;
            }
            else{
                num=0;
                break;
            }
        }
        if(*str=='')
            g_nStatus=kValid;
    
        return num;
    }
    
    int StrToInt(const char* str){
        g_nStatus=kInvalid;
        long long num=0;
    
        bool minus=false;
    
        if(str!=NULL && *str!=''){
            while(*str==' '){
                str++;
                if(str==NULL)
                    return 0;
            }
            if(*str=='+')
                str++;
            if(*str=='-'){
                str++;
                minus=true;
            }
            if(*str!='')
                num=StrToIntCore(str,minus);
        }
    
        return (int)num;
    }
    
    
    int main()
    {
        cout << StrToInt("  -998") << endl;
        cout << g_nStatus <<endl;
        Solution s;
        cout << s.StrToInt("123") << endl;
        return 0;
    }

    在线测试OJ:

    http://www.nowcoder.com/books/coding-interviews/1277c681251b4372bdef344468e4f26e?rp=2

    AC代码:

    class Solution {
    public:
        int StrToInt(string str) {
            long long num=0;
            bool minus=false;
            int len=str.length();
    
            if(len==0)
                return 0;
    
            int i=0;
            while(str[i]==' '){
                i++;
            	if(i==len)
                    return 0;
            }
            
            if(str[i]=='+')
                i++;
            else if(str[i]=='-'){
                minus=true;
                i++;
            }
    
            int flag;
            while(i<len){
                flag=minus?-1:1;
                if(str[i]>='0' && str[i]<='9'){
                    num=num*10+flag*(str[i]-'0');
                    if((!minus && num>0x7fffffff) || (minus && (signed int)num<0x80000000)){
                        num=0;
                        break;
                    }
                    i++;
                }
                else{
                    num=0;
                    break;
                }
            }
    
            return (int)num;
        }
    };
  • 相关阅读:
    Building a Space Station POJ
    Networking POJ
    POJ 1251 Jungle Roads
    CodeForces
    CodeForces
    kuangbin专题 专题一 简单搜索 POJ 1426 Find The Multiple
    The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
    The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
    robotparser (File Formats) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4692802.html
Copyright © 2011-2022 走看看