不明なため、質問を明確にするために、次の入力が必要です。
"2@0.88315@1@1.5005@true@0.112"
次のように変更します。
"1@0.88315@1@1@true@0.112"
問題は、あらゆる種類の比較を行うために、各数値をfloat値に解析する必要があることです。これか、「。」をチェックして手動で解析する必要があります。キャラクター。C標準ライブラリはあなたを助けることができる関数を提供するので、それを手動で行うことは厳格で、エラーが発生しやすく、不必要です。
これは宿題なので、実際の解決策ではなく、この問題に取り組む方法についていくつかのヒントを紹介します。あなたがすべきことは、これらのステップで解決策を書いてみることです。行き詰まった場合は、書いたコードで元の質問を編集してください。失敗している場所と、失敗していると思う理由を説明してください。
最初のステップは、入力を次のようにトークン化することです。
"2"
"0.88315"
"1"
"1.5005"
"true"
"0.112"
これは、文字列を反復処理して分割するか、ポインタを使用してから「@」文字を使用することで実行できます。文字列の分割は。で行うことができますstrtok
。ただし、strtok
文字列を変更して文字列を分割します。これは、この場合は必ずしも必要ではありません。より簡単な方法は、文字列を繰り返し処理し、「@」文字に到達するたびに停止することです。次に、入力は次のようにトークン化されます。
"2@0.88315@1@1.5005@true@0.112"
"0.88315@1@1.5005@true@0.112"
"1@1.5005@true@0.112"
"1.5005@true@0.112"
"true@0.112"
"0.112"
これらのサブストリングの一部は、floatを表すストリングで始まりません。それらのどれを行うかを決定する必要があります。これを行うには、各文字列の先頭をフロートとして解析することを試みることができます。これはで行うことができますsscanf
。フロートを解析した後、必要な比較を行うことができます。
文字列を別の長さに変更しようとしているため、float値を「1」に置き換える場合は、元の値の長さを確認する必要があります。1文字より長い場合は、後続の文字を前にシフトする必要があります。例えば:
"3.423@1"
最初のトークンを解析して、それがであることがわかった> 2
場合は、最初の文字を「1」に置き換えます。この結果は次のようになります。
"1.423@1"
次に、文字列の残りの部分を下にシフトして、そのトークンの残りの部分を削除する必要があります。
"1@1"