标签:直接 默认 没有 code 难点 nbsp 返回 lag for
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入一个字符串,包括数字字母符号,可以为空
如果是合法的数值表达则返回该数字,否则返回0
溢出判断是难点;
符号的判断;
空字符串;
//+-只能出现在开头,如果没有+-,默认为正数;
//此外如果有非数字,则直接返回0;
1 class Solution { 2 public: 3 int StrToInt(string str) { 4 int flag = 1; 5 int res = 0; 6 int temp; 7 if(str.length()==0) //空字符串 8 return 0; 9 if(str[0]==‘-‘) 10 flag = -1; 11 for(int i = 0; i<str.length(); i++) 12 { 13 if(str[i]<‘0‘ || str[i]>‘9‘){ //非数字 14 if(i==0 && (str[i]==‘+‘ || str[i]==‘-‘)){ //只允许i=0出现+或者- 15 continue; 16 } 17 else{ 18 return 0; 19 } 20 } 21 else{ 22 //int 十进制:-2^31=-21 4748 3648 到 2^31-1=21 4748 3647。共10位,21亿。 23 int digit = (int)(str[i]-‘0‘); 24 temp = res*10 + digit; 25 //注意还要判断res*10是否溢出 ,之后再判断加上digit是否溢出 26 //向上溢出判断 INT32_MAX < res*10 + digit 27 if(flag == 1 && (res>INT32_MAX/10 || res*10 > INT32_MAX-digit)) 28 return 0; 29 //向下溢出判断 INT32_MIN > res*10*(-1) - digit 30 if(flag == -1 && (res*flag<INT32_MIN/10 || res*10*flag < INT32_MIN+digit)) 31 return 0; 32 res = temp; 33 } 34 35 } 36 return flag*res; 37 } 38 };
标签:直接 默认 没有 code 难点 nbsp 返回 lag for
原文地址:https://www.cnblogs.com/grooovvve/p/12364712.html