46.把字符串转换成整数

把字符串转换成整数
  • 参与人数:2157时间限制:1秒空间限制:32768K
  • 本题知识点:  字符串
  •  算法知识视频讲解

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
我照着《剑指offer》上的标准代码自己写了一遍,但是无法通过
测试用例:
+2147483647
我在本机上测试该用例,能够通过,不清楚为什么牛客网上就不行。
上标准代码:
// 45.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string>
using namespace::std;

class Solution {
public:
	enum { valid = 0, invalid = 1 };
	bool g_valid;
	int StrToInt(string str) {
		if (str.empty()) {
			g_valid = invalid;
			return 0;
		}

		bool minus = false;
		if (str[0] == '-') {
			minus = true;
			string tmp = str.substr(1, str.size());
			return get(tmp, minus);
		}
		else if (str[0] == '+') {
			minus = false;
			string tmp = str.substr(1, str.size());
			return get(tmp, minus);
		}
		else {
			return get(str, minus);
		}
	}

	int get(string str, bool isMinus) {
		if (str.empty()) {
			g_valid = false;
			return 0;
		}

		int num = 0;
		for (int i = 0; i < str.size(); i++) {
			if (str[i] >= '0' && str[i] <= '9') {
				int flag = isMinus == true ? -1 : 1;
				num = num * 10 + flag * (str[i] - '0');
				if ((!isMinus && num > 0x7FFFFFFF) || (isMinus && num < 0x80000000)) {
					g_valid = false;
					break;
				}
			}
			else {
				g_valid = false;
				break;
			}
		}
		if (g_valid == false) {
			return 0;
		}
		else {
			return num;
		}
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	string str = "+2147483647";
	Solution s;
	int result = s.StrToInt(str);
	return 0;
}

精简版:
// 45.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string>
using namespace::std;

class Solution {
public:
	int StrToInt(string str) {
		int result = 0;
		bool isMinus = false;
		for (int i = 0; i < str.size(); i++) {
			if (i == 0 && str[i] == '-') {
				isMinus = true;
				continue;
			}
			if (i == 0 && str[i] == '+') continue;
			if (str[i] >= '0' && str[i] <= '9') {
				result = result * 10 + str[i] - '0';
			}
			else {
				return 0;
			}
		}
		return isMinus ? -1 * result : result;
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	string str = "+2147483647";
	Solution s;
	int result = s.StrToInt(str);
	return 0;
}


你可能感兴趣的:(46.把字符串转换成整数)