当前位置:编程学习 > C/C++ >>

字符串转化为数字

将给定字符串转化为数字,如果结果为正较大返回2147483647,如果结果为负且较大返回-2147483648。字符串除包含数字外还包含空格及其他字符,因此需要对不是数字的字符进行处理。
[cpp]
#include <stdio.h>  
 
int isspace(int x) 

    if(x == ' '|| x == '\t' || x == '\n' || x == '\f' || x == '\b' || x == '\r') 
    return 1; 
    else   
    return 0; 

 
int isdigit(int x) 

    if(x <= '9' && x >= '0')          
    return 1; 
    else  
    return 0; 

 
__int64 toInteger(char string[]) 

    int c;              /* current char */ 
    __int64 total;         /* current total */ 
    int sign;           /* if '-', then negative, otherwise positive */ 
 
    /* skip whitespace */ 
    while(isspace((int)(unsigned char)*string) ) 
    ++string; 
 
    c = (int)(unsigned char)*string++; 
    sign = c;           /* save sign indication */ 
    if(c == '-' || c == '+') 
    <span style="white-space:pre">  </span>c = (int)(unsigned char)*string++;    /* skip sign */ 
     
    total = 0; 
     
    while(isdigit(c)) 
    { 
    total = 10 * total + (c - '0');     /* accumulate digit */ 
    if(total >= 2147483647 && sign != '-') 
    { 
            total = 2147483647; 
        break; 
    } 
    else if(total >= 2147483648 && sign == '-') 
    { 
        total = 2147483648; 
        break; 
    } 
 
    c = (int)(unsigned char)*string++;    /* get next char */ 
    } 
     
    if(sign == '-') 
    return -total; 
    else 
    return total;   /* return result, negated if necessary */ 

 
int main() 

    char string[100] = {0}; 
    scanf("%s", &string); 
    printf("%I64d\n", toInteger(string)); 
    return 0;  
} www.zzzyk.com
测试用例:
100” output 100
“12343abc100”  output 12343
“23424339999999999999”  output  2147483647
“-100” output  -100
“+50” output 50
“   100” output 100
“12 20” output 12
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,