题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。

分析:这道题看起来不难,但考虑全面了也不容易,需要考虑一些特殊情况

1、输入的字符指针为空

2、出现了非数字的字符

3、输入的字符转换为数字后超过int表示的最大数

4、输入的字符中数字前面有正负号

 

  1. // ab.cpp : 定义控制台应用程序的入口点。  
  2. #include<stdafx.h>  
  3. #include<stdio.h>    
  4. #include <iostream>    
  5. #include <limits>  
  6. using namespace std;     
  7. #define VALID  1  
  8. #define INVALID 0  
  9. int state=INVALID;  
  10. int ChangeStringToNumbers(const char *str)  
  11. {  
  12.     state=INVALID;  
  13.     if(str==NULL)  
  14.         return 0;  
  15.     else 
  16.     {  
  17.         long long num=0;//VC6.0下long long不可以  
  18.         int minus=0;  
  19.         if(*str=='+')  
  20.             str++;  
  21.         else if(*str=='-')  
  22.         {  
  23.             minus=1;  
  24.             str++;  
  25.         }  
  26.         while(*str!='\0')  
  27.         {  
  28.  
  29.             if(*str<='9'&&*str>='0')  
  30.             {  
  31.                 num=num*10+(*str-'0');  
  32.                 if(num>numeric_limits<int>::max())  
  33.                 {  
  34.                     num=0;  
  35.                     return 0;  
  36.                 }  
  37.             }  
  38.             else 
  39.             {   
  40.                 num=0;  
  41.                 return 0;  
  42.             }  
  43.             str++;  
  44.         }  
  45.         if(minus==1)  
  46.             num=0-num;  
  47.         state=VALID;  
  48.         return num;  
  49.  
  50.     }  
  51.  
  52. }  
  53. int main()   
  54. {   
  55.     cout<<ChangeStringToNumbers("123")<<endl;//正常输入  
  56.     cout<<state<<endl;  
  57.     cout<<ChangeStringToNumbers("-123")<<endl;//带负号  
  58.     cout<<state<<endl;  
  59.     cout<<ChangeStringToNumbers("+123")<<endl;//带正号  
  60.     cout<<state<<endl;  
  61.     cout<<ChangeStringToNumbers(NULL)<<endl;//空  
  62.     cout<<state<<endl;  
  63.     cout<<ChangeStringToNumbers("12f3")<<endl;//有其他字符  
  64.     cout<<state<<endl;  
  65.     cout<<ChangeStringToNumbers("2147483649")<<endl;//越界  
  66.     cout<<state<<endl;  
  67.  
  68.     return 0;