数字转字符串

来源:互联网 发布:mac如何强制重启 编辑:程序博客网 时间:2024/06/12 23:51

一道面试题:

不使用库函数,实现int StrToInt(const char* string);

难点:(考虑尽量全面)

1、空指针时,处理情况

2、输入不合法时,处理情况

3、溢出时处理情况

测试用例:

1、+789

2、-12

3、789

4、12-47

5、空

6、超出int范围的一个数

代码:

[cpp] view plaincopyprint?
  1. /* 
  2.     1、判断是否为空 
  3.     2、判断正负 
  4.     3、判断是否有非法输入 
  5.     4、判断溢出 
  6.     5、如果是非法情况,返回值为0 
  7. */  
  8. int StrToInt(const char* str)  
  9. {  
  10.     if ( !str )  
  11.         return 0;  
  12.     int cur = 0;  
  13.     int flag = 1;   //标志该数正负  
  14.     int number = 0;  
  15.     while ( *(str+cur) != '\0' )  
  16.     {  
  17.         if ( cur == 0 && *(str+cur) == '-' )  
  18.         {  
  19.             flag = -1;  
  20.         }  
  21.         else if ( cur == 0 && *(str+cur) == '+' )  
  22.         {  
  23.             flag = 1;  
  24.         }  
  25.         else if ( cur == 0 && *(str+cur)>='0' && *(str+cur)<='9' )  
  26.         {  
  27.             flag = 1;  
  28.             number = number*10 + (*(str+cur)-'0');  
  29.         }  
  30.         else if ( cur == 0 && *(str+cur)<'0' && *(str+cur)>'9' )  
  31.         {  
  32.             return 0;   //第一个字符为非法字符  
  33.         }  
  34.   
  35.         //判断将后面的字符转换成数字  
  36.         if ( cur != 0 )  
  37.         {  
  38.             if ( *(str+cur)>='0' && *(str+cur)<='9' )  
  39.             {  
  40.                 number = number*10 + (*(str+cur)-'0');  
  41.                   
  42.                 if ( number%10 != (*(str+cur)-'0') )    //溢出判断  
  43.                     return 0;     
  44.             }  
  45.             else  
  46.                 return 0;   //后面字符有非法字符  
  47.         }  
  48.   
  49.         cur++;  //判断下一个字符  
  50.     }  
  51.       
  52.     if ( flag == -1 )  
  53.         return (0-number);  
  54.     else  
  55.         return number;  
  56. }  

原文地址:点击打开链接

原创粉丝点击