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

原创 2018年04月17日 21:55:15

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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》面试题:将字符串转换为整数

题目 题目:把字符串转化为整数 ,若输入无效,则返回0且将标志位设为true 自己以前在一些书上面看到过关于 字符串转化为整数的例子,心中有点印象,知道要考虑一些特殊情况。今天决定写下这段代码,...
  • u010412719
  • u010412719
  • 2015年08月30日 20:02
  • 1673

《剑指offer》把字符串转换成整数

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 题目链接:http://www.nowcoder.com/p...
  • libin1105
  • libin1105
  • 2015年09月13日 11:32
  • 1084

【剑指offer-Java版】49把字符串转换为整数

字符串转换为整数 : atoi可能的输入: 1 带符号数 2 无符号数 3 零 4 空指针 5 超出表示范围 – 暂时仅仅是直接退出且设置最小 – 可以考虑此时抛个异常 6 非法输入,比如...
  • Sugar_Z_
  • Sugar_Z_
  • 2016年04月27日 09:48
  • 1215

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

在c语言中,有一个函数我们可能不经常使用,那就是字符串转换为整数函数 atoi()atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数atoi( ) 函数会扫描参数 n...
  • qq_36782456
  • qq_36782456
  • 2017年04月30日 12:55
  • 117

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

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 解题思路:这个题目虽然简单,但是要考虑各种edge case,十分考验代码的基本功 ...
  • sinat_32547403
  • sinat_32547403
  • 2017年12月14日 08:19
  • 73

《剑指offer》——字符串转换为整数

#include using namespace std;int strToInt(const char* str) { int num = 0; int t = 1; whi...
  • zengzhen_CSDN
  • zengzhen_CSDN
  • 2015年12月09日 16:39
  • 227

剑指offer——面试题:把字符串转换为整数

题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法...
  • dengheCSDN
  • dengheCSDN
  • 2017年12月18日 21:23
  • 159

剑指offer - 面试题49:把字符串转换为整数

package Chapter7; /* * input: * "+343434" * "-323232" * "0" * output: * 343434 * 323232 * 0 ...
  • PeersLee
  • PeersLee
  • 2018年02月04日 13:10
  • 122

把字符串转换为整数

注意问题: 1)字符串是空指针的情况。 2)如果输入的是一个空字符串“” 3)所有‘0’到‘9’之外的字符都是非法的吗?加号和减号是合法输入。 4) 考虑溢出 #include usin...
  • buyingfei888
  • buyingfei888
  • 2014年07月30日 15:52
  • 714

将一个整数型字符串转换为一个整数

package com.utl.string; /*  * 将一组整数字符串转换为整数  * 例:"234"转换为整数型234  * 分析:涉及到许多问题,例如非法输入,有正负号,是否为空字符...
  • LQSLM
  • LQSLM
  • 2017年05月21日 10:32
  • 292
收藏助手
不良信息举报
您举报文章:剑指offer把字符串转换为整数
举报原因:
原因补充:

(最多只允许输入30个字)