-2

这怎么可能?我的一个教科书问题(在这里学习考试)声称您可以这样做并提出以下问题:

编写一个接受字符串的函数。该函数应将字符串转换为整数。如果它不能转换返回 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');

上面的方法有用吗?

4

2 回答 2

3

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

这是函数头:

int f(const char *str)
{

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

    int v;
    const char *c;
    int d;

    v = 0;
    c = str;

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

    while (*c)
    {

OP的主要思想是正确的。

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

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

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

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

        v += d;
        ++c;
    }

返回结果。

    return v;
}
于 2013-06-24T21:35:50.050 回答
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

于 2013-06-24T21:44:56.120 回答