剑指offer把字符串转换为整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

我的思路:1、先判断字符串是否为空,是则直接返回0;

2、判断首位,决定正负。定义一个初始化为1的标志位,判断首位字符,若为‘-’,标志位变为0;

3、遍历字符串的每一位,若为字母,直接返回0;若是数字字符,转换为数字后存储在数组中。

4、把数组中的数合并成一个数,判断标志位决定该数的正负,并返回该数。

class Solution {
public:
    int char2int(char a)
{
	int aa;
	aa = a - '0';
	return aa;
}
    int StrToInt(string str) {
    int strsize = str.size();
	int i = 0,flag = 1,counter = 0,sum = 0;
	int array[20];
	if(strsize == 0)
	{
		return 0;
	}
    if(str[0] == '-')
	{
		flag = 0;
	}
	
	for(i=0;i<strsize;i++)
	{
		if((str[i]>='a'&& str[i]<='z')||(str[i]>='A'&& str[i]<='Z'))
		{
			return 0;
		}
		else
			if(str[i]>='0' && str[i]<='9')
			{
				
				array[counter++] = char2int(str[i]);
			}
	}

	for(i=0;i<counter;i++)
	{
		sum += array[i] * pow(10.0,counter-1-i);
	}
    if(flag == 0)
	{
		sum = -sum;
	}
	return sum;
        
        
    }
};

思路存在缺陷

1、遍历字符串的同时可以直接将其转换为int型,还可以同时判断是否有非数字字符,而不需要存储在int型数组中,再进行最后和的计算。重要代码如下

for(int i=0; i<str.size(); i++)
        {
            if(str[i] < '0' || str[i] > '9')
            {
                sum = 0;
                break;
            }
            sum = sum * 10 + str[i] - '0';
        }

2、通过字符串的首位定义symbol标志位为-1或者+1,并把首位字符换为字符0,最后通过symbol与sum相乘得出最后的结果并返回。

完整的代码如下:

class Solution {
public:
    int StrToInt(string str) {
        if(str.empty())
            return 0;
        int symbol = 1;
        if(str[0] == '-')
        {
            symbol = -1;
            str[0] = '0';
        }
        else if(str[0] == '+')
        {
            symbol = 1;
            str[0] = '0';
        }
        int sum = 0;
        for(int i=0; i<str.size(); i++)
        {
            if(str[i] < '0' || str[i] > '9')
            {
                sum = 0;
                break;
            }
            sum = sum * 10 + str[i] - '0';
        }
        return symbol * sum;
    }
};


阅读更多
上一篇剑指offer之字符串中的空格替换问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭