算法习题20:把字符串转换成整数并输出

题目:输入一个表示整数的字符串,把该字符串转换成整数并输出
例如输入字符串"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



你可能感兴趣的:(字符串转换,整数,atoi,字符串转整数)