1

HH:MM形式のユーザー入力として時間をかけて、検証する必要があります。その特定の形式では適切な時間である必要があります。それを行う方法についての良いアイデアはありますか?

文字列を反復処理し、各文字を検証してから、それらを数値(またはある種のタイムスタンプ)に変換して、複数の文字列を相互に比較できる関数を作成しようとしています。

std名前空間のみを使用しています。

4

3 に答える 3

2

boost::regex を使用して文字列とその部分 (HH) および (MM) を照合し、scanf を使用して時間と分を取得します。

于 2012-12-22T19:28:26.250 に答える
2

アルゴリズムの問​​題のように聞こえますが、私は次のようにします。

1、文字列の長さが 5 の場合
は確認します。 2、「:」が途中にあるかどうかを確認します。
3、HHが範囲内であることを確認します。
4、MM が範囲内にあることを確認します。
5, 使いやすいフォーマットに変換します。

于 2012-12-22T19:31:22.173 に答える
1

この特定の問題にはやり過ぎかもしれませんが、この種のタスクはステート マシンに最適です。基本的に、一度に 1 文字ずつ入力を読み取る必要があり、各文字は、成功またはエラー状態になるまでマシンの状態を変更できます。例えば:

  1. 最初の文字
    • 数値でない場合はエラー状態に遷移
    • それ以外の場合は値を保存し、状態 2 に変更します
  2. 2 番目の文字
    • 数値でない場合はエラー状態に遷移
    • それ以外の場合は、格納された値に 10 を掛けて、2 番目の文字を追加します。結果が範囲外の場合、エラー状態に変更します。それ以外の場合は、状態 3 に変更します
  3. 3 番目の文字
    • の場合:、状態 4 に変更し、それ以外の場合はエラー状態に変更します
  4. 4 番目の文字
    • 最初のキャラクターと同様に、成功すると状態 5 に変化します。
  5. 5 番目の文字
    • 2 番目のキャラクターと同様に、成功すると状態 6 に変化します。
  6. 成功状態
    • 勝者はユウ!
  7. エラー状態
    • エラーを処理してください。
于 2012-12-22T22:30:24.527 に答える