再做个简单练习题,惭愧。

情况较复杂,但不能算难;是否隐藏着bug不确定。


输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。 请完成函数StrToInt,实现字符串转换成整数的功能。 友情提醒: 提交代码之前,请复查下你的程序,比如当给的字符串是如左边图片所示的时候,有考虑到么? 当然,它们各自对应的正确输出如右边图片所示(假定你是在32位系统下,编译环境是VS2008以上) 

测试用例:

                           
规则: 完成功能函数StrToInt, 不得用库函数atoi。

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


int StrToInt(const char *str)
{
    assert(str != NULL);
    if (*str=='\0')
        return 0;

    int i, len = strlen(str), flag = 0, type=0, rs = 0;
    for (i = 0; i < len; i++)
    {   
        if (*(str+i) == '-')
        {   
            if (flag==1)
              return 0;
            flag = 1;
            continue;
        }
        else if (*(str+i) == '+')
        {   
            if (flag==2)
              return 0;
            flag = 2;
            continue;
        }
        else if ((*(str+i) == ' ') && (type != 3 && (flag ==2 || flag == 1)))
            return 0;
        else if ((*(str+i) == ' ') && (type != 3 && (flag !=2 || flag != 1)))
            continue;
        else if ( (*(str+i) >'9') || (*(str+i) <'0'))
        {   
            break;
        }
        else
        {   
            rs = rs*10 + (*(str+i)) - '0';
            type = 3;
        }
    }
    int result = (flag==1)?-rs:rs;
    if ((flag == 0 || flag == 2 ) && result < 0 )
        result = 2147483647;

    if (flag == 1 && result > 0 )
        result = -2147483648;

    return result;
}



int main()
{

    char *test[] = {"", "1", "+1", "-1", "+123", "-123", "010", "+00131204", "123 456","++c", "--2", "abc", "-abc", "1a", "-1a", "   -321",
    "2147483647", "-2147483647", "-2147483648", "2147483648", "-2147483649", "-2147483650", " + 413"};

    int i = 0;
    for (; i < 23; i++)
    {
        printf("%s:", test[i]);
        printf("%d\n", StrToInt(test[i]));
    }
    /***********************/
    printf("=======================\n");
    printf("2147483647:%d\n", 2147483647);
    printf("-2147483647:%d\n", -2147483647);
    printf("-2147483648:%d\n", -2147483648);
    printf("2147483648:%d\n", 2147483648);
    printf("-2147483649:%d\n", -2147483649);

    return 0;
}



main:main.o
        gcc -o main main.o
main.o: main.c
        gcc -c main.c
clean:
        rm -rf main.o main

/****************/
sh start.sh 
make clean
make
./main


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值