【C++】std::stringの文字数を取得する.size()と.length()の使い方

目次

はじめに

C++でstd::stringを扱う際、その文字列に何文字含まれているかという「長さ」を取得したい場面は頻繁にあります。

この目的のために、std::stringクラスには .size().length() という2つのメンバ関数が用意されています。この記事では、これらの関数の使い方と、両者の関係について解説します。


.size() / .length() を使ったサンプルコード

このコードは、空の文字列と、値を持つ文字列の両方に対して、.size().length()を呼び出し、その戻り値が同じであることを示します。

完成コード

#include <iostream>
#include <string>

using namespace std;

int main() {
    string text = "Hello, C++";
    string empty_text;
    
    // 1. 値を持つ文字列の長さを取得
    cout << "--- text ---" << endl;
    cout << "内容: \"" << text << "\"" << endl;
    cout << ".size()   -> " << text.size() << endl;
    cout << ".length() -> " << text.length() << endl;
    
    // 2. 空の文字列の長さを取得
    cout << "\n--- empty_text ---" << endl;
    cout << "内容: \"" << empty_text << "\"" << endl;
    cout << ".size()   -> " << empty_text.size() << endl;
    cout << ".length() -> " << empty_text.length() << endl;

    return 0;
}

実行結果

--- text ---
内容: "Hello, C++"
.size()   -> 10
.length() -> 10

--- empty_text ---
内容: ""
.size()   -> 0
.length() -> 0

コードの解説

.size().length() は全く同じ

std::stringにおいて、.size().length()は、機能・性能ともに完全に同じです。どちらを使っても、文字列に含まれる文字数を size_t という符号なし整数型で返します。

なぜ2つ存在するのか?

std::stringは、C++の標準ライブラリ(STL)が標準化される過程で、他のコンテナ(vectorなど)との一貫性のために .size() を持つようになりました。一方で、他の多くのプログラミング言語での慣習に合わせて、より直感的な .length() という名前も残されました。

どちらを使うかは完全に好みの問題ですが、vectormapなど、他のSTLコンテナとコードの見た目を統一したい場合は .size() を、文字列の「長さ」という意図を明確にしたい場合は .length() を使う、といった使い分けが考えられます。


まとめ

今回は、C++の std::string の文字数を取得する .size().length() について解説しました。

  • .size().length() は、機能的に全く同じ
  • 文字列の文字数を返す。
  • どちらを使うかは、コーディングスタイルや好みの問題。

forループの条件式 for (size_t i = 0; i < my_string.length(); ++i) のように、文字列の長さを取得するのは非常に基本的な操作です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次