字符串转化为数字

将给定字符串转化为数字,如果结果为正较大返回2147483647,如果结果为负且较大返回-2147483648。字符串除包含数字外还包含空格及其他字符,因此需要对不是数字的字符进行处理。

#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 == '+')
    	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; 
}
测试用例:

100” output 100
“12343abc100”  output 12343
“23424339999999999999”  output  2147483647
“-100” output  -100
“+50” output 50
“   100” output 100
“12 20” output 12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值