zoukankan      html  css  js  c++  java
  • LeetCode.atoi

    请你来实现一个 atoi 函数,使其能将字符串转换成整数。

    首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

    当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

    该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

    注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

    在任何情况下,若函数不能进行有效的转换时,请返回 0。

    说明:

    假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,qing返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

    示例 1:

    输入: "42"
    输出: 42
    

    示例 2:

    输入: "   -42"
    输出: -42
    解释: 第一个非空白字符为 '-', 它是一个负号。
         我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
    

    示例 3:

    输入: "4193 with words"
    输出: 4193
    解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
    

    示例 4:

    输入: "words and 987"
    输出: 0
    解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
         因此无法执行有效的转换。

    示例 5:

    输入: "-91283472332"
    输出: -2147483648
    解释: 数字 "-91283472332" 超过 32 位有符号整数范围。 
         因此返回 INT_MIN (−231) 。
     1 int myAtoi(char* str) {
     2     if(!str){
     3         return 0;
     4     }
     5     bool inte = true;
     6     char *tmp;
     7     tmp = str;
     8     signed int num=0;
     9     signed int compare_num = 0;
    10     signed int tmp_add=0;
    11     while(*tmp != ''){
    12         if(*tmp == ' ')
    13         {    tmp++;
    14             continue;
    15         }
    16         if( (*tmp >= '0' && *tmp <= '9') || *tmp == '+' || *tmp == '-')
    17         {
    18             if(*tmp == '-'){
    19                 inte = false;
    20                 tmp++;
    21                 break;
    22             }
    23             if(*tmp == '+'){
    24                 inte = true;
    25                 tmp++;
    26 
    27             }
    28             break;
    29         }
    30         else{
    31             return 0;
    32         }
    33     }
    34     
    35     while(*tmp != ''){
    36         if(*tmp < '0' || *tmp >'9'){
    37             if(inte){
    38                 return num;
    39             }
    40             else
    41                 return -1 * num;
    42         } 
    43         tmp_add = num;
    44         for(int i = 0; i < 9;i++){
    45             if (num+tmp_add <num )
    46                 goto overnum;
    47             num = num + tmp_add;
    48         }
    49         if(num +(*tmp -'0') < num)
    50             goto overnum;
    51         num = num +(*tmp - '0');
    52         //num = num * 10 + (*tmp - '0');
    53 
    54         compare_num = num; 
    55         tmp++;
    56     }
    57     if(inte){
    58         return num;
    59     }
    60     else{
    61         return -1 * num;
    62     }
    63 overnum:
    64     if(inte) //正数
    65         return 2147483647;
    66     else
    67         return -2147483648;
    68     
    69 }
  • 相关阅读:
    LockSupport的用法及原理
    ReentrantReadWriteLock读写锁详解
    Java的CountDownLatch和CyclicBarrier的理解和区别
    AbstractQueuedSynchronizer超详细原理解析
    走进JVM
    【题解】Hanoi塔问题
    【题解】二的幂次方
    【题解】桐桐的递归函数
    【题解】数的计数
    【题解】极品飞车
  • 原文地址:https://www.cnblogs.com/micoblog/p/10156795.html
Copyright © 2011-2022 走看看