From 6ebd33f4b0cb59e9d21682328540512304eae28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn> Date: Fri, 7 Dec 2018 16:39:00 +0800 Subject: [PATCH] Create 8. String to Integer (atoi).md --- 8. String to Integer (atoi).md | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 8. String to Integer (atoi).md diff --git a/8. String to Integer (atoi).md b/8. String to Integer (atoi).md new file mode 100644 index 0000000..47673ac --- /dev/null +++ b/8. String to Integer (atoi).md @@ -0,0 +1,39 @@ +# [8. String to Integer (atoi)](https://leetcode.com/problems/string-to-integer-atoi/) +# 思路 +实现atoi函数,即将字符串转换为对应数字。 +> `atoi()`函数用来将字符串转换成整数(int),其原型为: +`int atoi (const char * str);` +atoi函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等), +直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 + +按照上面的说明转换即可(题目说了空白字符只考虑空格),为了防止溢出将结果用long long型存放。 + +# C++ +``` C++ +class Solution { +private: + int char2digit(const char c){ // 将字符转换为对应数字,若非数字则返回-1 + if(c >= '0' && c <= '9') return int(c - '0'); + return -1; + } +public: + int myAtoi(string str) { + long long res = 0; + int len = str.size(), i = 0, minus_sign = 0; + while(i < len && str[i] == ' ') i++; + if(i < len && (str[i] == '-' || str[i] == '+')) + if(str[i++] == '-') minus_sign = 1; + + while(i < len){ + int digit = char2digit(str[i]); + if(digit == -1) break; + res = res * 10 + digit; + if(minus_sign == 1 && -res < INT_MIN) return INT_MIN; + else if(minus_sign == 0 && res > INT_MAX) return INT_MAX; + i++; + } + return minus_sign == 1 ? -res: res; + } +}; +``` +