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_把字符串转换为数字的主要内容,如果未能解决你的问题,请参考以下文章

在php中,怎样把数字转化为字符串

OJ_单词倒排

oj---九度oj----大数---进制转换

HDU_oj_2043 密码

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。