zoukankan      html  css  js  c++  java
  • 库函数的实现atoi (const char *str)

    何海涛第49题。程序员面试100题第20题

    题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。
    例如输入字符串"345",则输出整数345。
    -----------------------------
    此题一点也不简单。不信,你就先不看一下的代码,
    你自己先写一份,然后再对比一下,便知道了。
    1.转换的思路:每扫描到一个字符,我们把在之前得到的数字乘以10再加上当前字符表示的
    数字。
    这个思路用循环不难实现。
    2.由于整数可能不仅仅之含有数字,还有可能以'+'或者'-'开头,表示整数的正负。
    如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,
    则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。
    3.接着我们试着处理非法输入。由于输入的是指针,在使用指针之前,
    我们要做的第一件是判断这个指针是不是为空。
    如果试着去访问空指针,将不可避免地导致程序崩溃。
    4.输入的字符串中可能含有不是数字的字符。
    每当碰到这些非法的字符,我们就没有必要再继续转换。
    最后一个需要考虑的问题是溢出问题。由于输入的数字是以字符串的形式输入,
    因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数而溢出。

    #include<iostream>
    using namespace std;
    enum Status {kValid = 0, kInvalid};
    int g_nStatus = kValid;
    int StrToInt(const char* str)
    {
    	g_nStatus = kInvalid;
    	long long num = 0;
    	if(str != NULL)
    	{
    		const char* digit = str;
    		// the first char in the string maybe '+' or '-'
    		bool minus = false;
    		if(*digit == '+')
    			digit ++;
    		else if(*digit == '-')
    		{
    			digit ++;
    			minus = true;
    		}
    		// the remaining chars in the string
    		while(*digit != '\0')
    		{
    			if(*digit >= '0' && *digit <= '9')
    			{
    				num = num * 10 + (*digit - '0');
    				// overflow
    				if(num > std::numeric_limits<int>::max())
    				{
    					num = 0;
    					break;
    				}
    				digit ++;
    			}
    			// if the char is not a digit, invalid input
    			else
    			{
    				num = 0;
    				break;
    			}
    		}
    		if(*digit == '\0')
    		{
    			g_nStatus = kValid;
    			if(minus)
    				num = 0 - num;
    		}
    	}
    	return static_cast<int>(num);
    }
    int main()
    {
    	char str[100];
    	while(cin>>str)
    	{
    		cout<<StrToInt(str)<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    这些年伴随我的一些好习惯
    求一个整数的二进制中1的个数
    这些 iOS 面试基础题目,你都深入了解吗?
    HTML5 input placeholder 颜色修改示例
    微软雅黑 在css里怎么写
    CSS3实现边框锯齿效果
    jquery中attr和prop的区别
    jquery怎么获取radio选中的值
    动态生成元素动作绑定,jquery 1.9如何实现
    js写的5秒钟倒计时跳转
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2787135.html
Copyright © 2011-2022 走看看