将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
2017-08-11 12:12
603 查看
剑指offer:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
注意:C++中的string结尾不一定为NULL(/0)
示例1
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
注意:C++中的string结尾不一定为NULL(/0)
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647
class Solution { public: bool isNotNumber(char input){ if(input < '0' || input > '9') return true; else return false; } int StrToInt(string str) { int len = str.size(); if(!len) return 0; if(str[0] != '+' && str[0] != '-' && isNotNumber(str[0])) return 0; int result = 0; int sign = 1; int i = 0; if(str[0] == '-'){ sign = -1; i = 1; } if(str[0] == '+') i = 1; for(; i < len; i++){ if(isNotNumber(str[i])) return 0; result = result * 10 + str[i] - '0'; } return result * sign; } };优化后的代码:
class Solution { public: bool isNotNumber(char input){ if(input < '0' || input > '9') return true; else return false; } int StrToInt(string str) { int len = str.size(); if(!len) return 0; if(str[0] != '+' && str[0] != '-' && isNotNumber(str[0])) return 0; int result = 0; int sign = 1; int i = 0; if(str[0] == '-'){ sign = -1; i = 1; } if(str[0] == '+') i = 1; for(; i < len; i++){ if(isNotNumber(str[i])) return 0; result = (result << 1) + (result << 3) + (str[i] & 0x0f);//相当于下面一行代码 //用左移代替乘法,利用数字ASCII码的性质,避免了减法。 //result = result * 10 + str[i] - '0'; } return result * sign; } };
相关文章推荐
- 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
- 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
- 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数
- 《剑指offer》-将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数
- 算法:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
- 写一个字符串函数,这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- 字符串包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数
- 【c语言】为下面的函数原型编写函数定义,这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 提交
- 【C语言】为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- C 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数包含了任何非数字字符,函数就返回零。
- 写一个函数,输入int型,返回整数逆序后的字符串。如:输入123,返回“321”。 要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串
- 实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数