LeetCode OJ String to Integer (atoi) 字符串转数字

 1 #include <iostream>
 2 #include <assert.h>
 3 using namespace std;
 4 int ato(const char *str) {
 5     int i=0,e=0,s=0;
 6     int max=2147483647,min=-2147483648;
 7     int f=1;
 8     int tem[10]={0};
 9     unsigned int pan=0;
10     while(*str==‘ ‘){    //过滤掉连续空格
11         str++;
12         }
13     if(*str==‘-‘||*str==‘+‘||(*str<=‘9‘&&*str>=‘0‘)){
14         if(*str==‘-‘||*str==‘+‘){    //过滤掉正负号
15             if(*str==‘-‘)
16                 f=-1;
17             str++;
18         }
19         while(*str==‘0‘)    //过滤掉前面的无用的0
20             str++;
21         if( *str<=‘9‘&&*str>=‘0‘ ){        //过滤掉非数字的字符
22
23             while( *str!=‘\0‘){            //判断字符串是否结束
24                 if( *str>‘9‘||*str<‘0‘ )    //字符串还没结束,就出现非数字字符
25                     break;
26                 if( i==10 ){            //大于10位的数字都要作溢出处理
27                     if(f==-1)
28                         return min;
29                     else
30                         return max;
31                 }
32                 tem[i++]=*str-‘0‘;
33                 e=e*10+(*str-‘0‘);
34                 str++;
35             }
36             if(i==10){            //刚好10位,需要特殊处理
37                 if(f==-1){    //负数处理
38                     if(tem[0]>2){    //超过30,0000,0000
39                         return min;
40                     }
41                     for(i=0;i<10;i++){
42                         pan=pan*10+tem[i];
43                     }
44                     if(pan>=2147483648)  //  负数的绝对值大于等于2147483648
45                         return min;
46                 }
47                 else{    //正数处理
48                     if(tem[0]>2){
49                         return max;
50                     }
51                     for(i=0;i<10;i++){
52                         pan=pan*10+tem[i];
53                     }
54                     if(pan>=2147483647)  //  负数的绝对值大于等于2147483648
55                         return max;
56                 }
57             }
58             return f*e;
59         }
60         else
61             return 0;
62     }
63     return 0;
64 }
65 int main(){
66     char str[1000];
67     int qq=0;
68     while(cin>>str){
69         qq=ato(str);
70         cout<<qq<<endl;
71     }
72     return 0;
73 }

这个东西原来挺难考虑周全的,还好leetcode会指出是输入什么数据会输出错误,不然估计找一辈子了。

鉴于这么苛刻的条件,贴出自己的不简洁的代码,这道题第一次AC。

以后有好办法再修改。

时间: 2024-12-07 09:03:37

LeetCode OJ String to Integer (atoi) 字符串转数字的相关文章

leetCode 8. String to Integer (atoi) 字符串

8. String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intende

[LeetCode]41. String to Integer(atoi)字符串转整数

Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended for this problem to be spe

LeetCode中String to Integer (atoi) 字符串转换成整数

int atoi(const char *str) { long long result = 0; while (*str==' ')str++; int flag=0; if (*str == '-' || *str == '+') { flag = (*str == '-') ? -1 : 1; str++; } while (*str!='\0') { int temp = *str - '0'; if (temp >= 0 && temp <= 9) { result

leetcode——String to Integer (atoi) 字符串转换为整型数(AC)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

LeetCode:String to Integer (atoi)

1.题目名称 String to Integer (atoi) (字符串到数字的转换) 2.题目地址 https://leetcode.com/problems/string-to-integer-atoi/ 3.题目内容 英文:Implement atoi to convert a string to an integer. 中文:实现atoi函数,将输入的字符串(String类型)转换为整型数据(Integer类型) 提示:实现的atoi函数需要满足以下特征 忽略字符串第一个非空格字符前的所

LeetCode 008 String to Integer (atoi)

[题目] Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended for this problem to b

Leetcode 数 String to Integer (atoi)

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie String to Integer (atoi) Total Accepted: 9862 Total Submissions: 67880 Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge,

【leetcode】String to Integer (atoi)

String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended f

8. String to Integer (atoi) 字符串转为int类型的所有可能情况

8. String to Integer (atoi) 问题: 输入一个字符串,将字符串转为int类型,处理所有可能的输入情况. 可能的输入情况: 1.字符串为空.即"". 2.首先是假设输入的字符串都是数字型的,可含正负号,例如12345,+12548,-15568. 3.字符串中含有非数字的其他字符类型,例如a,-sd,-1286dgg558,000822fg55. 4.字符串首尾含有空格的,例如 -558dg12, 12dc12 . 5.针对转换后的数字越界,有两种情况,一个是超