zoukankan      html  css  js  c++  java
  • 【剑指offer】字符串转换为数字,C++实现

    # 题目

          把字符串转换成整数

    # 思路

    1.功能测试

          正数/复数/0

    2.边界值测试

          最大的正整数/最小的负整数(数据上下溢出)

    3.特殊输入测试

    • 空字符串“”的处理,返回0,设置非法输入
    • 字符串只有符号位的处理,返回0,设置非法输入
    • 输入的字符串中有非数字字符,返回0,设置非法输入

    # 代码

    #include <iostream>
    #include <string>
    using namespace std;
    // 67:把字符串转换成整数
    class Solution {
    public:
        /*全局变量*/
        enum {kValid,kInvalid}; // 枚举元素(kValid=0,kInvalid=1)
        int g_nStatus = kValid; // 标记是否是非法输入
    
        /*功能函数*/
        int StrToInt(string str)
        {
            g_nStatus = kInvalid;          // 初始标记为非法输入
            long long num = 0;             // 存储结果
            const char* cstr = str.c_str();// 指向字符数组的指针
    
            // 判断是否是空指针和空字符串""
            if( (cstr != NULL) && (*cstr != '') )
            {
                // 处理符号位
                int minus = 1;
                if(*cstr == '-')
                {
                    minus = -1;
                    cstr++;
                }
                else if(*cstr == '+')
                {
                    minus = 1;
                    cstr++;
                }
    
                // 处理其余位
                while(*cstr != '')
                {
                    if(*cstr > '0' && *cstr < '9')
                    {
                        // string转int类型
                        g_nStatus = kValid;           // 标记为合法输入
                        num = num*10 + (*cstr -'0');  // string转换为int类型
                        cstr++;
    
                        // 数据上下溢出
                        if( ((minus>0) && (num > 0x7FFFFFFF)) ||((minus<0) && (num > 0x80000000)) )
                        {
                            g_nStatus = kInvalid; // 如果溢出,则标记为非法输入
                            num = 0;
                            break;
                        }
                    }
                    else
                    {
                        g_nStatus = kInvalid;
                        num = 0;
                        break;
                    }
                }
    
                if(g_nStatus == kValid)
                    num = num * minus;
    
            }
            cout<<(int)num<<endl;
            return (int)num;
        }
    };
    int main()
    {
        string str = "123";
        Solution solution;
        solution.StrToInt(str);
        return 0;
    }

  • 相关阅读:
    Streams那些事之概述与原理
    ORA12514: ORACLE 监听错误
    使用软件工具插件 备忘
    jquery 弹出遮罩插件 prettyPhoto 参数说明
    SQL 9位随机码
    向上下左右不间断无缝滚动的效果(兼容火狐和IE)[转]
    SQL 将一串字符串转换为列插入临时表
    jQuery插件开发全解析[转]
    DIV+CSS命名规范
    ASP.NET中Session跨站点共享实现方式
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/9018673.html
Copyright © 2011-2022 走看看