C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で文中の最も長い単語の長さを求める方法|サンプルコード付き解説


複数の単語(文字列)から構成される文が与えられたとき、その文中に含まれる最も長い単語の長さを求めるのが本記事の目的です。

実行例

入力 -: hello I am here
出力 -: 単語の最大長は : 5

入力 -: tutorials point is the best learning platform
出力 -: 単語の最大長は : 9

以下のプログラムで採用しているアプローチ

  • 文を文字列として入力する
  • 文の末尾に到達するまで、文字列を1文字ずつループで走査する
  • 空白以外の文字が続いている間を1つの単語として数え、その長さを変数に保持する
  • これまでの最大長と現在の単語の長さをmax()関数に渡し、大きい方の値を一時変数に保存する
  • max()関数が返した最大の長さを画面に表示する

アルゴリズム

開始
ステップ1 -> 文中の最長単語の長さを求める関数を宣言する
    int word_length(string str)
        int len = str.length()
        int temp = 0
        int newlen = 0
        ループ: int i = 0 から i < len まで i++ ずつ
            IF (str[i] != ' ')
                newlen++ を実行
            Else
                temp = max(temp, newlen) を設定
                newlen = 0 にリセット
            End
        return max(temp, newlen)
ステップ2 -> main() 内
    string str = "tutorials point is the best learning platform" を宣言
    word_length(str) を呼び出して結果を表示
終了

サンプルコード

#include <iostream>
using namespace std;
// 最長の単語を見つけるための関数
int word_length(string str) {
    int len = str.length();
    int temp = 0;
    int newlen = 0;
    for (int i = 0; i < len; i++) {
       if (str[i] != ' ')
          newlen++;
       else {
          temp = max(temp, newlen);
          newlen = 0;
       }
    }
    return max(temp, newlen);
}
int main() {
    string str = "tutorials point is the best learning platform";
    cout <<"maximum length of a word is : "<<word_length(str);
    return 0;
}

出力

上記のコードを実行すると、次の出力が得られます。

maximum length of a word is : 9

コードの解説

このプログラムでは、文全体を1文字ずつ走査します。空白文字(' ')以外が続いている間はカウンタ newlen をインクリメントして現在の単語の長さを数え、空白に到達した時点で最大長を保持する temp と比較し、大きい方の値を temp に更新してから newlen を0にリセットします。

ループ終了後、最後の単語の長さはまだ temp に反映されていないため、return max(temp, newlen) として最後の単語との比較を行ってから結果を返している点がポイントです。

計算量

  • 時間計算量:O(n)(n は文の文字数)
  • 空間計算量:O(1)

  1. C++で文字列の最後の単語の長さを求める方法

    問題概要文字列 s が与えられます。s には英字と空白が含まれます。このとき、文字列に含まれる最後の単語の長さを求める必要があります。最後の単語が存在しない場合は 0 を返します。たとえば、入力が「I love Programming」の場合、最後の単語は「Programming」なので、出力は 11 となります。解法のアプローチこの問題は、stringstream を使って文字列を単語ごとに分割し、最後に読み取った単語の長さを記録することで解けます。手順は以下の通りです。変数 n を 0 で初期化します。stringstream を使って文字列から単語を順番に読み込みます。各単語 temp

  2. 二分法を用いて方程式の根を求めるC++プログラム

    関数f(x)と2つの数a、bが与えられ、f(a)・f(b)<0を満たし、関数f(x)が区間[a, b]内に存在するとします。ここでの課題は、二分法(バイセクション法)を用いて、関数f(x)の区間aとbの間に存在する根の値を求めることです。 二分法とは? 二分法とは、「a」と「b」で定義された範囲内において、関数f(x)の根の値を求めるための数値計算手法の一つです。関数の根とは、その値を代入したときにf(x)=0となるような値xのことです。 例 方程式 F(x) = x^3 − 8 を考える この方程式は、x = 2 のとき F(x) = 2^3 − 8 = 0 となります。 したがって