A Za, A Za, Fighting...

坚信:勤能补拙

把字符串转换成整数

题目来源:
http://blog.163.com/prevBlogPerma.do?host=zhedahht&srl=25411174200731139971&mode=prev

#include<stdio.h>
#include
<stdlib.h>

#include
<string.h>
#include
<limits.h>
/*
 * #define INT_MAX 2147483647   
 * #define INT_MIN (-INT_MAX-1) 
 
*/

enum Status {
    Success,
    Fail
};
enum Status ret;
int negative;

int
Str2Int(
const char *input)
{
    
long long num = 0;
    negative 
= 0;
    ret 
= Fail;
    
if(input == NULL)
        
return num;

    
const char *ptr = input;
    
if(*ptr=='+' || *ptr=='-') {
        
if(*ptr == '-')
            negative 
= 1;
        
++ptr;
    }
    
while(*ptr) {
        
if(!(*ptr>='0' && *ptr<='9')) 
            
return num;

        
if((!negative && num>INT_MAX) || (negative && (-num)<INT_MIN)) 
            
return num;

        num 
= num*10 + (*ptr-'0');
        
++ptr;
    }
    ret 
= Success;
    
return num;
}

#define MAX_LEN 101

int
main(
int argc, char **argv)
{
    
int result;
    
char value[MAX_LEN];
    
while(scanf("%s", value) != EOF) {
        result 
= Str2Int(value);
        
if(ret == Success)
            printf(
"%d\n", negative ? (-result) : result);
        
else
            printf(
"Invalid\n");
    }

    
return 0;
}


posted on 2011-06-10 19:46 simplyzhao 阅读(221) 评论(0)  编辑 收藏 引用 所属分类: M_面试题集锦


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


导航

<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜