zoukankan      html  css  js  c++  java
  • 字符串转换成整数(微软面试)

    要注意以下几点:

    一,通过一个全局变量标记传入的指针是否为NULL或者是否含有非法字符或者是否造成int溢出。

    二,需要判断是否以+号或者-号开头。

    三,在函数内部用long long保存结果,如果有溢出,则结果为0。

    四,最后,用static_cast强制转换成int。

    #include <cstring>
    #include <iostream>
    #include <limits>
    using namespace std;
    enum Status
    {
        Valid = 0,
        Invalid
    };
    int status = Invalid;                     // 状态初始化
    int atoi(const char* str)
    {
        int length, i;
        bool positive = true;
        long long ret = 0;
        
        if (str != NULL)                      // 判断NULL
        {
            length = strlen(str);
            i = 0;
            
            if (str[i] == '+')                // 判断正负符号
            {
                i++;
            }
            else if (str[i] == '-')
            {
                positive = false;
                i++;
            }        
            while (i < length)
            {
                if (str[i] >= '0' && str[i] <= '9')                     // 是否含有非法字符
                {
                    ret = ret * 10 + str[i] - '0';                
                    if (ret > std::numeric_limits<int>::max())          // 判断溢出
                    {
                        ret = 0;
                        break;
                    }                
                    i++;
                }
                else
                {
                    ret = 0;
                    break;
                }
            }        
            if (i == length)              // 转换过程一切顺利
            {
                status = Valid;
                if (!positive)
                {
                    ret = 0 - ret;
                }
            }
        }    
        return static_cast<int>(ret);     // 将long long转换成int,返回结果
    }
    int main()
    {
        char str[255];    
        while(cin.getline(str,255))
        {
            int res=atoi(str);
            cout<<res<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    C语言volatile关键字的用法
    UDP广播包
    进程和线程的区别
    Unix/Linux进程间通信
    虚拟空间,malloc
    自我介绍
    java初始化顺序
    java 队列基础操作
    java IO基础操作
    Python中的Tab补全功能添加
  • 原文地址:https://www.cnblogs.com/wft1990/p/6170314.html
Copyright © 2011-2022 走看看