-2

これはどのように可能ですか?私の教科書の質問の1つ(ここで試験のために勉強する)は、これができると主張し、次のように尋ねます。

文字列を受け取る関数を書きます。この関数は、文字列を整数に変換する必要があります。変換できない場合は 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を指している場合、反復は null ターミネータで停止します。これはC ではFALSEです。スキャンは左から右です。

    while (*c)
    {

OPは主なアイデアを正しく理解しました。

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

dをテストして、それが0から9の間であることを確認するだけです。

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

このソリューションでは、インデックスの代わりにポインターを使用します。

        v += d;
        ++c;
    }

結果を返します。

    return v;
}
于 2013-06-24T21:35:50.050 に答える