ホームページ >バックエンド開発 >C++ >文字列を指定して、その中の連続する数値の合計を求めます。

文字列を指定して、その中の連続する数値の合計を求めます。

王林
王林転載
2023-08-28 09:17:14749ブラウズ

###############問題文###

数値とアルファベットを含む文字列 str を指定しました。指定された文字列で使用可能な連続する数字のシーケンスで表されるすべての数値の合計を見つける必要があります。文字列を指定して、その中の連続する数値の合計を求めます。

例例

###入力### リーリー ###出力### リーリー ###説明###

12 と 43 の合計は 55 に等しいです。

###入力### リーリー ###出力### リーリー ###説明###

1、2、3の合計は6です。

###入力### リーリー ###出力### リーリー ###説明###

文字列に数字が含まれていないため、出力には 0 が返されます。

問題を解決するためのロジックは、指定された文字列からすべての数値を抽出し、それらを合計することです。

方法 1

このアプローチでは、isDigit() メソッドを使用して、現在の文字が数字であるかどうかを確認します。また、現在の文字が数字である場合は、数値の現在の値を 10 で乗算し、現在の文字を数値に加算します。桁。### ###アルゴリズム###

ステップ 1

- 「number」変数と「sum」変数をゼロに初期化します。

ステップ 2

-文字列を反復処理し、isDigit() メソッドを使用して現在の文字が 0 ~ 9 であることを確認します。

ステップ 3

- 現在の文字が数字の場合は、その数値に 10 を掛けて、現在の数値を加算します。

ステップ 4

- 現在の文字が数字でない場合は、「number」変数の値を「sum」変数に加算し、「number」変数の値を次のように更新します。ゼロ。

ステップ 5

-ループの繰り返しが完了したら、「number」の値を「sum」変数に加算し、sum 変数の値を返します。
  • ###例### リーリー ###出力### リーリー

  • 時間計算量
  • - O(n)。ループを 1 つだけ使用するためです。

  • 空間の複雑さ
  • - 余分な空間を使用しないため、O(1)。

    アプローチ 2
  • このアプローチでは、文字の ASCII 値を使用して、現在の文字が数字であるかどうかを確認します。また、文字列に数字が含まれるまで文字を 'number' 変数に追加し、atoi( ) 文字列から数値を抽出するメソッド。

    ###アルゴリズム###

  • ステップ 1
  • - 「number」変数を定義し、空の文字列に初期化します。また、「sum」変数を定義し、0に初期化します。

  • ステップ 2
- for ループを使用して文字列を走査し、文字列の各文字を取得します。

ステップ 3

- c-「0」が 0 以上 9 以下の場合、現在の文字が数字であることを意味します。
  • ステップ 4

    -現在の文字が数字の場合、それを「数値」文字列に追加します。
  • ステップ 5 -現在の文字が数字でない場合は、 c_str() メソッドを使用して数値文字列を文字配列に変換し、それを atoi() のパラメーターとして渡します。メソッドを使用して、文字列を数値に変換します。また、数値文字列を「」値で更新します。

    atoi() メソッドは、文字列が数値に変換できる場合は数値を返し、そうでない場合は 0 を返します。

ステップ 6

- for ループの反復が完了したら、再び atoi() メソッドを使用して文字列を数値に変換し、合計値に加算します。

###例### リーリー ###出力### リーリー

  • 時間計算量 - O(N)

  • 空間複雑度 − O(1)

  • 方法 3

    この方法では、正規表現を使用してすべての数値の一致を検索します。その後、文字列を数値に変換し、それを sum 変数に追加します。 ###アルゴリズム###

  • ステップ 1 -正規表現パターンを定義します。

  • ステップ 2 - regex_search() メソッドを使用して、数値文字列の一致を見つけます。

    ステップ 3

    -一致するものが見つかる限り、while ループを使用して反復を行います。
  • ステップ 4 - while ループで、 stoi() メソッドを使用して文字列を数値に変換し、それを sum 変数に追加します。

  • ステップ 5
- 再度、match().suffix() メソッドを使用して文字列を更新します。こうすることで、重複した一致が得られなくなります。

###例### リーリー ###出力### リーリー

  • 時間計算量 - O(N)。正規表現は文字列を反復処理することで一致を見つけます。

  • 空間複雑度 − O(1)

  • ###結論###
文字列内の連続する数値の合計を求める 3 つの異なる方法を学びました。最後の方法は正規表現を使用するため、最も最適化されたコードです。ただし、正規表現を扱うのは初心者にとっては難しい場合があります。

以上が文字列を指定して、その中の連続する数値の合計を求めます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。