jake1036

面试100 17字符串变整数

       面试100  17字符串变整数

  一 问题需要注意的地方:
        字符串变整数
       需要特殊考虑的地方:
      (1) 字符串为空
      (2) 字符串含有非法字符
      (3) 字符串开头和结尾含有+ - 号
      (4) 整数可能会溢出
      (5) 当出现错误的时候,如何提示用户错误信息 可以使用全局变量,或者传递参数来判断

  二 代码如下:
     
#include <iostream>
#include 
<limits>
 
using namespace std; 
 
int atois(char * s , bool & ok)
 
{
    
if(s == 0)
      
return -1 ;
      
      
char * p = s ;           
      p
++ ; //第一个字符不处理 
     int sum = 0;
     
while(*p)
     
{  
        
if(*>= '0' && *<= '9')  
        

          
if(sum < 0//若溢出则sum会变为负号 
          {
              ok 
= false;
              
return -1;     
          }
                  
          sum  
= sum * 10 + *- '0' ;         
        }

        
else
         
{
           ok 
= false ;
           
return -1 ;     
         }

        
        p
++ ;      
     }
  
     
     
if(*== '-')
      sum 
= 0 - sum; //用加减法 
     return sum ;  
       
 }
 


 
int main()
 
{
   
bool ok = true ;  
   
int x = atois("-232334234231423111111111111111111111111111111111111" , ok) ;
   
if(ok)
     cout
<<x ;
   
else
     cout
<<"error" ;
   system(
"pause") ;
   
return 0 ;    
 }



posted on 2011-05-18 09:22 kahn 阅读(232) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理