题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。
例如输入字符串"345",则输出整数345。
————————————————————————————————
/*程序逻辑非常简单,但能不能写出稳定性很高的代码呢?这也许是公司看重考察的
一定要仔细分析,多加思考
1对指针是否做了空的判断,如果使用了为空的指针将导致程序崩溃
2输入是否是负数
3输入是否含有非法字符
4是否数据过大溢出
*/
如果有空格,如何处理
数字间掺杂字母如何处理
如下例子:
0123 123
-123 -123
23 23
2 3 2
--23 0
-2147483648 -2147483648
-2147483647
-2147483647
2147483647
2147483647
2147483648
0
23sdf33 23
-2 -2
0
...
//============================================================================
// Name : StringToNumber.cpp
// Author : YLF
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
int sum = 0;
char input = 0;
int flag = 0;
while(true){
scanf("%c",&input);
if(input == 10)
break;
else{
if(input == '-'){
//check for symbol
if(flag != 0)
break;
flag = -1;
}
else if(input == '+'){
//check for symbol
if(flag != 0)
break;
flag = 1;
}
else if(input == ' '){
//如果一开始就有空格,可以忽略,如果后面出现,则报错
if(flag == 0 && sum == 0)
;
else
break;
}
else if(input>='0'&&input<='9'){
if((sum>=214748365)||(flag!=-1&&sum>=214748364&&(input-'0')>7) || (flag==-1&&sum>=214748364&&(input-'0')>8)){
//out of bounds
sum = 0;
break;
}
sum = sum*10 + (input-'0');
}else{
break;
}
}
}
if(flag == 0)
flag = 1;
cout<<flag*sum;
return 0;
}
-23f
-23
-2147483648
-2147483648
-2147483649
0
+2147483648
0
+2147483647
2147483647
--34
0