はじめに
C++でstd::string
を扱う際、ユーザーからの入力が空だった場合や、処理の途中で文字列が空になったかどうかを判定したい場面は頻繁にあります。
この判定には、.empty()
というメンバ関数を使うのが、最もシンプルで推奨される方法です。.empty()
は、文字列が空であれば true
を、1文字でも含まれていれば false
を返します。
.empty()
を使ったサンプルコード
このコードは、string
を作成し、文字列を代入したり、.clear()
で空にしたりしながら、その都度 .empty()
を呼び出して、文字列が空かどうかを判定します。
完成コード
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string text_buffer;
// 1. 作成直後の状態
// まだ何も入っていないので、empty()はtrueを返す
cout << "作成直後: 文字列は空ですか? -> " << boolalpha << text_buffer.empty() << endl;
// 2. 文字列を代入
text_buffer = "sample text";
cout << "代入後: 文字列は空ですか? -> " << boolalpha << text_buffer.empty() << endl;
// 3. .clear()で中身を空にする
text_buffer.clear();
cout << "clear()後: 文字列は空ですか? -> " << boolalpha << text_buffer.empty() << endl;
return 0;
}
boolalpha
: bool
値を 1
/0
ではなく true
/false
の文字列として出力させます。
コードの解説と .length()
との違い
.empty()
- 機能: 文字列の長さがゼロかどうかを判定し、
bool
値 (true
/false
) を返します。 - 戻り値:
- 文字列が空の場合 (
.length()
が0
) →true
- 文字列に1文字以上ある場合 →
false
- 文字列が空の場合 (
なぜ .length() == 0
ではなく .empty()
を使うのか?
文字列が空かどうかは、if (my_string.length() == 0)
のように、長さを返す .length()
(または .size()
) を使っても判定できます。しかし、.empty()
を使う方が一般的に推奨されます。その理由は以下の通りです。
- 意図の明確さ:
.empty()
という関数名は、「空かどうかを判定したい」というプログラマの意図を直接的に表現します。.length() == 0
よりも、コードが読みやすくなります。 - パフォーマンス: 規格上、
.empty()
は.length()
よりも高速に実装されることが許されています(常にそうとは限りませんが、遅くなることはありません)。
結論として、文字列が空かどうかを判定する目的では、常に .length() == 0
よりも .empty()
を使うべきです。
まとめ
今回は、C++の std::string
が空かどうかを判定する .empty()
メソッドについて解説しました。
.empty()
を使うと、文字列が空 (true
) かどうかを簡単に判定できる。.length() == 0
よりも、意図が明確で、かつパフォーマンス上有利なため、.empty()
の使用が強く推奨される。
ユーザーからの入力文字列を処理する前など、文字列が有効な値を持っているかを確認する際に、if (!my_string.empty())
のようなチェックを入れるのが、安全なプログラミングの定石です。