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

C++プログラム:再帰呼び出しを使って文字列の長さを求める方法


文字列が与えられたとき、その長さを求めるのが本記事のテーマです。文字列の長さは、ユーザー定義関数または組み込み関数を使って計算できます。

文字列の長さを求める方法は、主に以下の2通りがあります。

  • ユーザー定義関数を使う方法 − 文字列の先頭から末尾まで走査し、終端文字「\0」が見つかるまで、再帰呼び出しを行いながらカウントを1ずつ増やしていきます。
  • 組み込み関数を使う方法 − ヘッダーファイル「<cstring>」(C言語では「string.h」)に定義されているstrlen()関数を利用します。この関数は文字列へのポインタを引数として1つ受け取り、文字列の長さを整数値(size_t型)として返します。

具体例

入力: str[] = "tutorials point"
出力: 文字列の長さは 15
説明: 文字列「tutorials point」にはアルファベット14文字と空白1つが含まれており、合計15文字となります。

アルゴリズム

開始
ステップ1 → 再帰を使って文字列の長さを求める関数を宣言する
    int length(char* str)
        IF (*str == '\0')
            return 0
        End
        Else
            return 1 + length(str + 1)
        End
ステップ2 → main() 関数内で
    char str[] = "tutorials point" を宣言する
    length(str) を呼び出す
終了

再帰の仕組みのポイント

この再帰関数では、現在指している文字が終端文字「\0」であれば0を返して処理を終えます。それ以外の場合は、ポインタを1文字分進めた str + 1 を引数として自分自身を再度呼び出し、戻り値に1を加算していきます。こうして各文字ごとに関数呼び出しが積み重なり、最終的に文字数が合算されて文字列の長さが求まります。

サンプルコード

#include <bits/stdc++.h>
using namespace std;
// 文字列の長さを求める再帰関数
int length(char* str) {
    if (*str == '\0')
        return 0;
    else
        return 1 + length(str + 1);
}
int main() {
    char str[] = "tutorials point";
    cout<<"length of string is : "<<length(str);
    return 0;
}

実行結果

上記のコードを実行すると、以下のような出力が得られます。

length of string is : 15

補足:strlen() 関数との比較

標準ライブラリの strlen() を使えば、同じ処理を1行で実現できます。

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char str[] = "tutorials point";
    cout<<"length of string is : "<<strlen(str);
    return 0;
}

strlen() の方が簡潔で高速ですが、再帰による実装は「再帰処理の考え方」や「ポインタ操作」を学ぶ上で非常に良い練習になります。ただし、再帰版は文字数分だけスタックフレームを消費するため、非常に長い文字列に対しては注意が必要です。


  1. C++で再帰を使って数値の階乗を計算する方法【初心者向け解説】

    非負整数 n の階乗(factorial)とは、n 以下のすべての正の整数を掛け合わせた値のことです。例えば、7 の階乗は次のように計算され、結果は 5040 になります。7! = 7 * 6 * 5 * 4 * 3 * 2 * 1 7! = 5040この記事では、再帰(recursion)を使って数値の階乗を求める C++ プログラムを紹介します。サンプルコード#include <iostream> using namespace std; int fact(int n) {     if ((n==0)||(n==1))  &n

  2. Pythonで再帰を使って文字列を反転させるプログラムの書き方

    再帰(リカージョン)の手法を使って文字列を逆順に並べ替えたい場合は、ユーザー定義の関数を再帰と組み合わせて実装します。再帰とは、大きな問題をより小さな単位に分割してそれぞれの結果を計算し、それらを組み合わせることで最終的な答えを導き出す手法です。文字列の反転においても、この考え方をそのまま応用できます。コード例以下に実際のプログラム例を示します。def reverse_string(my_string):    if len(my_string) == 0:        r