将字符串转换为整数?

时间:2013-06-24 21:22:22

标签: c

这怎么可能?我的一本课本问题(在这里学习考试)声称你可以这样做并提出以下问题:

编写一个接受字符串的函数。该函数应将字符串转换为整数。如果它无法转换返回0。

示例1:8976返回值 ((((8*10 + 9) *10)+ 7 )* 10) + 6

示例2:67A返回值0

如何做到这一点?我知道你可以使用atoi()函数,但本书希望在没有任何函数的情况下完成这项工作吗?

编辑:进一步思考:

 int i, ans;
 char number[5]="8976";

 for(i=0;i<strlen(number);i++)
   ans=(ans*10)+(number[i]-'0');

以上工作会怎样?

2 个答案:

答案 0 :(得分:3)

我正在写一些东西,但与此同时,在OP编辑和进一步的评论中基本上回答了这个问题。

这是函数头:

int f(const char *str)
{

变量: v 是计算值, c 是指向当前正在扫描的字符的指针, d 是当前数字。

    int v;
    const char *c;
    int d;

    v = 0;
    c = str;

c 指向 0 时,迭代将在空终止符上停止,在 FALSE 中。当扫描从左到右时。

    while (*c)
    {
OP获得了正确的主意。

        v *= 10;
        d = *c - '0';

您应该只测试 d 以检查它是否在 0 9 之间。

        if (d < 0 || d > 9)
            return 0;

此解决方案使用指针代替索引。

        v += d;
        ++c;
    }

返回结果。

    return v;
}

答案 1 :(得分:0)

你已经到了一半,你的代码还不错,只是错过了一个声明和一个if

int main()
{
    int i, ans;
    ans=0;
    char number[5]="12";

    for(i=0;i<strlen(number);i++){
        if( !(number[i]>='0' && number[i]<='9')  ){
            ans = 0;
            break;
        }
        ans=(ans*10)+(number[i]-'0');
    }

    printf("%d\n",ans);

    return 0;
}

你也可以在这里查看代码: http://cfiddle.net/cvYCYB