题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。
分析:这道题看起来不难,但考虑全面了也不容易,需要考虑一些特殊情况
1、输入的字符指针为空
2、出现了非数字的字符
3、输入的字符转换为数字后超过int表示的最大数
4、输入的字符中数字前面有正负号
- // ab.cpp : 定义控制台应用程序的入口点。
- #include<stdafx.h>
- #include<stdio.h>
- #include <iostream>
- #include <limits>
- using namespace std;
- #define VALID 1
- #define INVALID 0
- int state=INVALID;
- int ChangeStringToNumbers(const char *str)
- {
- state=INVALID;
- if(str==NULL)
- return 0;
- else
- {
- long long num=0;//VC6.0下long long不可以
- int minus=0;
- if(*str=='+')
- str++;
- else if(*str=='-')
- {
- minus=1;
- str++;
- }
- while(*str!='\0')
- {
- if(*str<='9'&&*str>='0')
- {
- num=num*10+(*str-'0');
- if(num>numeric_limits<int>::max())
- {
- num=0;
- return 0;
- }
- }
- else
- {
- num=0;
- return 0;
- }
- str++;
- }
- if(minus==1)
- num=0-num;
- state=VALID;
- return num;
- }
- }
- int main()
- {
- cout<<ChangeStringToNumbers("123")<<endl;//正常输入
- cout<<state<<endl;
- cout<<ChangeStringToNumbers("-123")<<endl;//带负号
- cout<<state<<endl;
- cout<<ChangeStringToNumbers("+123")<<endl;//带正号
- cout<<state<<endl;
- cout<<ChangeStringToNumbers(NULL)<<endl;//空
- cout<<state<<endl;
- cout<<ChangeStringToNumbers("12f3")<<endl;//有其他字符
- cout<<state<<endl;
- cout<<ChangeStringToNumbers("2147483649")<<endl;//越界
- cout<<state<<endl;
- return 0;
- }