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

C++で文字列内の単語数をカウントする方法を解説

はじめに

本記事では、スペース・改行文字(\n)・タブ文字(\t)を含む可能性のある文字列が与えられたとき、その文字列に含まれる単語の総数を計算し、結果を出力する方法を解説します。

入出力例

入力 − string str = "welcome to\n tutorials point\t"

出力 − 文字列内の単語数 − 4

説明 − 文字列には welcome、to、tutorials、point の4つの単語が含まれており、それ以外は単語間にあるスペース(" ")、改行文字(\n)、タブ文字(\t)です。

入力 − string str = "\nhonesty\t is the best policy"

出力 − 文字列内の単語数 − 5

説明 − 文字列には honesty、is、the、best、policy の5つの単語が含まれており、それ以外は単語間にあるスペース(" ")、改行文字(\n)、タブ文字(\t)です。

プログラムで使用するアプローチ

この問題には複数の解法が考えられますが、まずは以下のコードで採用しているシンプルなアプローチから見ていきましょう。

  • 文字列を格納するためのchar型の配列(例: str[])を作成する
  • 2つの一時変数を宣言する。1つは文字列内の単語数を数えるためのcount、もう1つはフラグ操作に使用するtemp
  • strがnullでない間、whileループを開始する
  • ループ内で、*strがスペース・改行・タブのいずれかである場合はtempを0に設定する
  • それ以外の場合でtempが0であれば、tempを1に設定し、countの値を1増やす
  • strポインタを1つ進める
  • countの値を返す
  • 結果を出力する

サンプルコード

#include <iostream>
using namespace std;
// 指定された文字列内の単語数をカウントする関数
int total_words(char *str){
    int count = 0;
    int temp = 0;
    while (*str){
        if (*str == ' ' || *str == '\n' || *str == '\t'){
            temp = 0;
        }
        else if(temp == 0){
            temp = 1;
            count++;
        }
        ++str;
    }
    return count;
}
int main(){
    char str[] = "welcome to\n tutorials point\t";
    cout<<"Count of words in a string are: "<<total_words(str);
    return 0;
}

出力

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

Count of words in a string are: 4

このアルゴリズムのポイントは、フラグ変数tempを使って「単語の先頭に到達した瞬間だけカウントする」点にあります。連続する空白文字が現れてもtempが0のままになるため、同じ単語が二重にカウントされることはありません。計算量は文字列の長さに比例するO(n)で、非常に効率的です。

  1. C#で文字列内の単語を逆順に反転する方法

    C#で文字列内の単語を逆順に反転する方法 文字列処理の基本的な操作のひとつに、文字列を逆順に並べ替えるというものがあります。ここでは、C#を使って指定した文字列の単語(文字列)を反転させる方法を解説します。 たとえば、次のような文字列があったとします。 Welcome この文字列を反転すると、結果は次のように表示されます。 emocleW 実装コード例 文字列を反転するには、LINQの Reverse() メソッドを活用します。以下のコードを試してみましょう。 using System; using System.Linq; class Demo { static void Mai

  2. Pythonで文字列内の単語数を数えるプログラムの書き方【初心者向け】

    テキスト処理を行っていると、「入力された文字列の中に単語がいくつ含まれているのか」「特定の単語が何回出現するのか」を調べたい場面によく出会います。この記事では、Pythonを使って文字列内の単語数を数え、その結果を出力する複数の方法を、サンプルコードと実行結果付きでわかりやすく解説します。 基本的な考え方はシンプルです。「単語は空白・改行・タブなどの区切り文字で分けられている」ため、区切り文字の出現回数を数えれば、単語数は「区切り文字の数+1」として求められます。 方法1:forループを使う まずは最も基本的な方法です。文字列を1文字ずつ順番に調べ、区切り文字が見つかるたびにカウントを1