はじめに
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() という名前も残されました。
どちらを使うかは完全に好みの問題ですが、vectorやmapなど、他のSTLコンテナとコードの見た目を統一したい場合は .size() を、文字列の「長さ」という意図を明確にしたい場合は .length() を使う、といった使い分けが考えられます。
まとめ
今回は、C++の std::string の文字数を取得する .size() と .length() について解説しました。
.size()と.length()は、機能的に全く同じ。- 文字列の文字数を返す。
- どちらを使うかは、コーディングスタイルや好みの問題。
forループの条件式 for (size_t i = 0; i < my_string.length(); ++i) のように、文字列の長さを取得するのは非常に基本的な操作です。
