将字符串转换成整数(atoi的实现)

思路:
1.‘+’,‘-’问题
2.NULL,‘\0’问题
3.其他字符问题,包括空格、tab
4.越界溢出问题
5.数字前面几位是0

#include<iostream>
using namespace std;
#include<stdlib.h>

enum Status{ KValid = 0, KInvalid }; //KVlid-合法 KInvalid-非法
int g_nStatus = KValid;  //在最后得到结果时,判断是合法的0,还是非法的非0

int StrToInt(const char* str)
{
	long long StrToIntCore(const char *digit, bool minus);
	g_nStatus = KInvalid;
	long long num = 0;

	if (str != NULL&&*str != ‘\0‘)//判空,‘\0‘
	{
		bool minus = false; //符号 默认为负

		if (*str == ‘+‘)
		{
			str++;
		}
		else if (*str == ‘-‘)
		{
			str++;
			minus = true;
		}

		if (*str != ‘\0‘)
		{
			num = StrToIntCore(str, minus);
		}
	}

	return (int)num;
}

long long StrToIntCore(const char *digit, bool minus)
{
	long long num = 0;
	while (*digit != ‘\0‘)
	{
		if (isdigit(*digit)) //while(*digit >= ‘0‘&&*digit <= ‘9‘)
		{
			int flag = minus ? -1 : 1;
			num = num * 10 + flag*(*digit - ‘0‘);

			if ((!minus&&num > 0x7fffffff) || (minus&&num < (signed int)0x80000000))
			{
				num = 0;
				break;
			}

			digit++;
		}
		else
		{
			num++;
			break;
		}
	}

	if (*digit == ‘\0‘)
	{
		g_nStatus = KValid;
	}

	return num;
}

int main()
{
	char str[] = "-12345";
	char str1[] = "-012345";
	char str2[] = "012345";
	char str3[] = "--12345";

	cout << StrToInt(str) << endl;
	cout << g_nStatus << endl;
	cout << StrToInt(str1) << endl;
	cout << g_nStatus << endl;
	cout << StrToInt(str2) << endl;
	cout << g_nStatus << endl;
	cout << StrToInt(str3) << endl;
	cout << g_nStatus << endl;

	system("pause");
	return 0;
}

时间: 2024-10-08 08:16:05

将字符串转换成整数(atoi的实现)的相关文章

17.把字符串转换成整数atoi

http://zhedahht.blog.163.com/blog/static/25411174200731139971/ 代码如下: bool bValid = true; int str2int_core(const char *digit,bool minus) { long long sum = 0; int flag = minus ? -1:1; while(*digit!='\0') { if (*digit>='0'&&*digit<='9') { sum =

[Leetcode] String to integer atoi 字符串转换成整数

Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended for this problem to be spe

字符串转换成整数

题目描述 输入一个由数字组成的字符串,把它转换成整数并输出.例如:输入字符串"123",输出整数123. 给定函数原型int StrToInt(const char *str) ,实现字符串转换成整数的功能,不能使用库函数atoi. 分析与解法 基本思路为:从左至右扫描字符串,把之前得到的数乘以10,然后加上当前字符所表示的数字. 然而,我们需要考虑以下几个问题: 输入为空指针时 数字前面的正负号 非法的字符 整形溢出 前三个问题很容易解决,这里主要考虑整形溢出的问题.一般来说,当发生

《剑指offer》第六十三题(把字符串转换成整数)

// 面试题67:把字符串转换成整数 // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不 // 能使用atoi或者其他类似的库函数. #include <iostream> long long StrToIntCore(const char* str, bool minus); enum Status { kValid = 0, kInvalid }; int g_nStatus = kValid;//设置全局错误变量,用来反映无效输入 int StrToIn

算法实战(八)字符串转换成整数

一.前言 这个题和第七题的类型有点相似,不过这个题目涉及到了一些字符串的处理,由于比较简单,加上在加班的时候,把活干完了,没啥事情可以做了,所以我干脆把这个题目也一起做了. 二.题目 题目:请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号:假如第一个非空字符是数字,则直接将其与之后连续的数字字符组

剑指offer之【把字符串转换成整数】

题目: 把字符串转换成整数 链接: https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&tqId=11202&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0

程序员面试50题(4)—把字符串转换成整数[算法]

题目:输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345. 分析:这道题尽管不是很难,学过C/C++语言一般都能实现基本功能,但不同程序员就这道题写出的代码有很大区别,可以说这道题能够很好地反应出程序员的思维和编程习惯,因此已经被包括微软在内的多家公司用作面试题.建议读者在往下看之前自己先编写代码,再比较自己写的代码和下面的参考代码有哪些不同. 首先我们分析如何完成基本功能,即如何把表示整数的字符串正确地转换成整数.还是以"345

C语言将一个字符串转换成整数

1.环境 ubuntu16.04 Eclipse C语言 2.问题 用C语言编写程序,将一个字符串转换成整数. 3.解决方法 程序代码:https://github.com/southeast02/JZOF/blob/master/chap01_page12_1.c

[算法练习] 把字符串转换成整数

题目说明: 输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345. 程序代码: #include <gtest/gtest.h> using namespace std; int StrToInt(const char* szValue, int nBase = 0, bool* bValid = NULL) { long long nValue = 0; int nSign = 1; if (bValid) { *bValid