OJ_3_把字符串转换为数字
Posted grooovvve
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OJ_3_把字符串转换为数字相关的知识,希望对你有一定的参考价值。
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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 };
以上是关于OJ_3_把字符串转换为数字的主要内容,如果未能解决你的问题,请参考以下文章