1

わかりました。コードはうまく機能し、インクリメント++演算子とデクリメント演算子を使用しています。

unsigned int atob(const char* input)
{

    int i = 0;

    while (input[i] == '0' || input[i] == '1') i++;

    unsigned result = 0;
    unsigned currentBit = --i;

    while ((*input == '0') || (*input == '1')) {
        char isCurrentBitSet = *input == '1';
        unsigned setValue = (isCurrentBitSet << currentBit--);
        result |= setValue;
        input++;
    }

    return result;
}

ここで、whileステートメントの下部にあるinput ++を除いて、すべてのdec(-)/ inc(++)を削除する必要があります。私はこの実装を行う方法に困惑しています。

4

5 に答える 5

4

どうぞ:

unsigned int atob(const char* input)
{
  unsigned result = 0;

  while ((*input == '0') || (*input == '1')) {
    result = (result << 1) | (*input++ - '0');
  }

  return result;
}

スタックスペースも節約します:)

于 2012-07-03T15:33:48.747 に答える
2

通常の方法は、結果を0に設定して開始することです。次に、入力の各文字について、結果を現在のビットの1ビット左にシフトし、入力文字列の最後(またはまたはor以外のもの)に到達するまで繰り返します。、 とりあえず)。01

于 2012-07-03T15:22:14.903 に答える
1

私のソリューションを大幅に変更することにしました:

unsigned int atob(const char* input)
{
    unsigned val; 

    for (val = 0; *input; input++) {
        if (*input == '1') val = (val << 1) | 1;
        else if (*input == '0' ) val <<= 1;
        else break;
    }

    return val;
}
于 2012-07-03T15:32:34.710 に答える
0

i++ を i = i + 1 に置き換えますか? それは簡単に思えます。

于 2012-07-03T15:24:02.757 に答える
-1

関数全体をstrtolの呼び出しに置き換えることを検討してください

于 2012-07-03T15:24:52.470 に答える