zoukankan      html  css  js  c++  java
  • LeetCode-8-string-to-integer-atoi

    一、题目

    实现atoi,将字符串转化乘int类型的数

    int myAtoi(string str)函数,返回值为转化后的数,参数为需要转化的str

    题目链接:https://leetcode.com/problems/string-to-integer-atoi/description/

    二、实现

    重点在于string的情况能不能考虑得比较周全

    可能考虑不到的情况

    1、开头有空格,返回后面的数字,如“     123”返回123

    2、有一个或多个‘+’或‘-’,返回0

    3、超过int范围时,大于INT_MAX返回INT_MAX,小于INT_MIN返回INT_MIN

    4、如果数字中间有一个非数字字母,返回前面的一部分,如“123e23”返回123

    int myAtoi(string str) {
    	long long num = 0;
    	int sign = 1;
    	bool readnum = false;
    	for (auto c : str) {
    		int c_num = 0;
    
    		if (readnum == false && c == ' ')
    			continue;
    		//判断第一个字母的正负性
    		if (readnum == false&& (c == '+' || c == '-')) {
    			if (c == '-')
    				sign = -1;
    			readnum = true;
    			continue;
    		}
    		readnum = true;
    		/*
    		switch (c)
    		{
    		case '1':c_num = 1;break;
    		case '2':c_num = 2;break;
    		case '3':c_num = 3;break;
    		case '4':c_num = 4;break;
    		case '5':c_num = 5;break;
    		case '6':c_num = 6;break;
    		case '7':c_num = 7;break;
    		case '8':c_num = 8;break;
    		case '9':c_num = 9;break;
    		case '0':c_num = 0;break;
    		default:
    			return num * sign;
    		}
    		*/
    		if (c >= '0' && c <= '9') 
    			c_num = c - '0';
    		else
    			return num * sign;
    		if ((num * 10 + c_num) * sign > INT_MAX )
    			return INT_MAX;
    		if ((num * 10 + c_num) * sign < INT_MIN)
    			return INT_MIN;
    		num = num * 10 + c_num;
    	}
    	return num * sign;
    }
    

    三、本题总结

    1、使用long long类型的数先来存取中间结果,在运算前和INT_MAX和INT_MIN进行比较,可以有效防止溢出的情况,在第七题中也用到了这种方式(但是第七题中没有加上尾数,所以情况还没有考虑完善,宁外,判断可以改到循环末尾来做,这样更加简洁)

    2、效率问题,使用for(auto i: str)要优于for(int i=0;i<str.size();i++)

    3、关于char转成int的方法,最开始使用的是switch,不仅运行速度慢,而且麻烦,实验c-‘0’的方式很方便,关键在于c++语言int和char的关系还是不够熟练。

  • 相关阅读:
    Keepalived详解(一):Keepalived介绍【转】
    Python运维开发基础06-语法基础【转】
    Python运维开发基础05-语法基础【转】
    Python运维开发基础04-语法基础【转】
    Python运维开发基础03-语法基础 【转】
    Python运维开发基础02-语法基础【转】
    Python运维开发基础01-语法基础【转】
    Shell编程中while与for的区别及用法详解【转】
    rsync+inotify实现实时同步案例【转】
    Linux查看压缩文件内容【转】
  • 原文地址:https://www.cnblogs.com/likaiming/p/8029810.html
Copyright © 2011-2022 走看看