字符串转换整数 (atoi)

不容易啊。。。。。。。。太笨的方法了

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

  • 读入字符串并丢弃无用的前导空格
  • 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  • 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  • 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0
    。必要时更改符号(从步骤 2 开始)。
  • 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于
    −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ’ ’ 。
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。



class Solution {
public:
    int myAtoi(string s) {
        int max=2147483647;
        int min=0-max-1;
        int x=0;
        int32_t base=10;
        string temp;
        string temp2;
        	int aa=0,bb=0,y=0;
        bool isUnsigned=false;
        int UnsignedPos=-2;
        bool isDig=false;
        int sum=0;
        uint64_t sumtemp=0;
                for(int i=0;i<s.length();i++)
	{
		if(s[i]!=' ')
		{
			temp=s.substr(i);
			break;
		}
	}

	if(!(temp[0]=='+'||temp[0]=='-'||((temp[0]>='0'&&temp[0]<='9'))))
		return 0;

		cout<<temp<<endl;
    for(y=0;y<temp.length();y++)
	{
			if(temp[y]=='-'||temp[y]=='+')
			{	
				aa=y;
				break;
			}
	}

	for(y=0;y<temp.length();y++)
	{
			if(temp[y]>='0'&&temp[y]<='9')
			{	
				bb=y;
				break;
			}
	}
    if(bb-aa>1)
		return 0;

	for(int j=0;j<temp.length();j++)
	{

        
		if(temp[j]=='-'||temp[j]=='+')
		{
            if(isDig)
				break;
			x++;
			if(x>1)
				return 0;
                if(temp[j]=='-')
				UnsignedPos=j;
			
			
		}
		if(temp[j]>='0'&&temp[j]<='9')
		{
			if(j-UnsignedPos==1)
			{
				isUnsigned=true;	
			}
			
			isDig=true;
			temp2+=temp[j];
			continue;
			
			
		}
		else 
		{
			if(isDig)
				break;
		}
	}
	cout<<temp2<<endl;
	

	for(int k=0;k<temp2.length();k++)
	{
		sumtemp=(sumtemp*base)+(temp2[k]-'0');
        	if(sumtemp>2147483647)
		{
		    sum=2147483647;
		    break;
		}
	}
	if(sumtemp>2147483647)
		sum=2147483647;
	else
		sum=sumtemp;
	cout<<"sum="<<sum<<endl;
	if(sum>=max)
		sum=max;
	if(isUnsigned)
		if(sumtemp>2147483647)
			sum=0-sum-1;
		else
			sum=0-sum;
	cout<<"sum="<<sum<<endl;
    return sum;
        
	
    }
};

字符串转换整数 (atoi)

上一篇:leetcode 8 字符串转换整数(atoi)


下一篇:字符串数组->数字 atoi实现