50把字符串转换成整数
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 +2147483647 1a33 输出 2147483647 0
这道题目真的很简单,不要畏难!!嘿嘿。。。
思路:这道题其实没有想象的那么多的边界条件,也没有那么繁琐。首先理解题目意思,是字符串转换为整数,不是小数,没有小数点或科学计数法的考量。
然后一个字符转换为整数的方法是,res = res * 10 + str[i] - '0';
边界情况
1)开始都是空格
2)考量第一个出现的字符是+,-
3)转换的数字大于INT_MAX,小于INT_MIN。
4)出现其他非数字字符。
使用一个全局变量记录是否是输入错误,因为return 0有很多种情况,也可能是字符串就一个0,返回也是0,因此需要设置一个变量区分开来。
class Solution { public: bool valid = true; int StrToInt(string str) { int head = 1; if(str.empty()){ return 0; } int i = 0; for(i = 0;i < str.size();++i){//去掉前面的空格 if(str[i] == ' '){ continue; } else{ break; } } if(str[i] == '+'){//第一个字符是正号 head = 1; ++i; } else if(str[i] == '-'){//第一个字符是负号 head = -1; ++i; } //转换数字 int res = 0; for(i;i < str.size();++i){ if((head == 1) && (res > INT_MAX) || (head == -1) && (res < INT_MIN)){//转换的字符大于计算机表示位数 res = 0; valid = false; return res; } if((str[i] - '0' >= 0) && (str[i] - '0' <= 9)){ res = res * 10 + str[i] - '0'; } else{//出现其他的非数字字符 res = 0; valid = false; return res; } } return head * res; } };