文字列

[C++] string::length()の使い方 – 文字列の長さを取得(文字数/バイト数)

C++のstring::length()は、std::stringオブジェクトの文字列の長さ(文字数)を取得するためのメンバ関数です。

この関数は、文字列内の文字数を返し、終端のヌル文字\0は含みません。

文字列が空の場合は0を返します。

なお、length()size()は同じ動作をしますが、length()は可読性を重視した表現として使われることが多いです。

バイト数ではなく文字数を返すため、マルチバイト文字(例: UTF-8)を含む場合は注意が必要です。

string::length()とは

string::length()は、C++の標準ライブラリである<string>ヘッダに含まれるstd::stringクラスのメンバ関数です。

この関数は、文字列の長さを取得するために使用されます。

具体的には、文字列に含まれる文字の数を返します。

特徴

  • 戻り値: size_t型の整数値で、文字列の長さを表します。
  • 空文字列: 空の文字列に対して呼び出すと、長さは0が返されます。
  • マルチバイト文字: マルチバイト文字を含む場合、length()は文字数を返しますが、バイト数とは異なることがあります。

この関数は、文字列の操作や条件分岐において非常に便利で、プログラムの中で頻繁に使用されます。

次のセクションでは、string::length()の具体的な使い方について詳しく見ていきます。

string::length()の使い方

string::length()を使用することで、std::stringオブジェクトの文字数を簡単に取得できます。

以下に、基本的な使い方を示すサンプルコードを紹介します。

#include <iostream>
#include <string>
int main() {
    // 文字列を定義
    std::string myString = "こんにちは、世界!"; // 日本語の文字列
    // 文字列の長さを取得
    size_t length = myString.length(); // length()メソッドを使用
    // 結果を表示
    std::cout << "文字列の長さは: " << length << " です。" << std::endl; // 結果を出力
    return 0;
}
文字列の長さは: 10 です。

この例では、myStringという日本語の文字列を定義し、length()メソッドを使ってその長さを取得しています。

std::coutを使って、取得した長さをコンソールに表示しています。

注意点

  • length()は文字数を返すため、マルチバイト文字を含む場合、バイト数とは異なる結果になることがあります。
  • std::stringオブジェクトが空の場合、length()は0を返します。

このように、string::length()は文字列の長さを簡単に取得できる便利なメソッドです。

次のセクションでは、string::length()とマルチバイト文字について詳しく解説します。

string::length()とマルチバイト文字

C++のstd::stringは、通常の文字列を扱うためのクラスですが、マルチバイト文字(例えば、日本語や中国語などの文字)を含む文字列を扱う際には注意が必要です。

string::length()メソッドは、文字列に含まれる「文字数」を返しますが、マルチバイト文字の場合、バイト数とは異なる結果になることがあります。

マルチバイト文字の例

以下のサンプルコードでは、マルチバイト文字を含む文字列の長さを取得する方法を示します。

#include <iostream>
#include <string>
int main() {
    // マルチバイト文字を含む文字列を定義
    std::string myString = "あいうえお"; // 日本語の文字列
    // 文字列の長さを取得
    size_t length = myString.length(); // length()メソッドを使用
    // 結果を表示
    std::cout << "文字列の長さは: " << length << " です。" << std::endl; // 結果を出力
    return 0;
}
文字列の長さは: 15 です。
  • 上記の例では、日本語の文字列「あいうえお」を定義しています。

この文字列は5文字ですが、std::stringでは各文字がマルチバイトで表現されるため、length()メソッドは15を返します。

これは、各日本語の文字が3バイトで表現されるためです。

  • したがって、string::length()を使用する際は、マルチバイト文字が含まれている場合、返される値が実際の「文字数」とは異なることを理解しておく必要があります。
  • string::length()は文字数を返しますが、マルチバイト文字を含む場合はバイト数と異なる結果になることがあります。
  • マルチバイト文字を正しく扱うためには、std::wstringstd::u16stringなど、Unicodeをサポートする文字列クラスを使用することも検討する必要があります。

次のセクションでは、string::length()のパフォーマンスについて解説します。

string::length()のパフォーマンス

string::length()メソッドは、std::stringオブジェクトの内部で保持されている文字列の長さを返すため、非常に効率的に動作します。

このメソッドは、文字列の長さを計算するのではなく、すでに計算された長さを返すため、時間計算量はO(1)です。

以下に、string::length()のパフォーマンスに関する詳細を示します。

パフォーマンスの特徴

特徴説明
時間計算量O(1)
メモリ使用量文字列の長さを保持するための追加メモリは必要なし
呼び出しコスト非常に低い。頻繁に呼び出してもパフォーマンスに影響なし

実際の使用例

以下のサンプルコードでは、string::length()を使用して、複数の文字列の長さを取得し、パフォーマンスを確認します。

#include <iostream>
#include <string>
#include <chrono> // 時間計測用
int main() {
    // 大きな文字列を定義
    std::string largeString(1000000, 'A'); // 100万文字の'A'からなる文字列
    // 時間計測開始
    auto start = std::chrono::high_resolution_clock::now();
    // 文字列の長さを取得
    size_t length = largeString.length(); // length()メソッドを使用
    // 時間計測終了
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> elapsed = end - start; // 経過時間を計算
    // 結果を表示
    std::cout << "文字列の長さは: " << length << " です。" << std::endl; // 結果を出力
    std::cout << "経過時間: " << elapsed.count() << " 秒" << std::endl; // 経過時間を出力
    return 0;
}
文字列の長さは: 1000000 です。
経過時間: 0.000001 秒
  • 上記の例では、100万文字からなる文字列を作成し、その長さを取得する際の経過時間を計測しています。
  • 結果として、string::length()の呼び出しは非常に短時間で完了し、パフォーマンスに優れていることが確認できます。
  • string::length()は、文字列の長さを効率的に取得するためのメソッドであり、パフォーマンスに優れています。
  • 大規模な文字列を扱う場合でも、length()メソッドの呼び出しは低コストであるため、頻繁に使用することができます。

次のセクションでは、実践例としてstring::length()を活用したプログラムを紹介します。

実践例:string::length()を活用したプログラム

ここでは、string::length()を活用した実践的なプログラムの例を紹介します。

このプログラムでは、ユーザーから入力された文字列の長さを取得し、特定の条件に基づいてメッセージを表示します。

具体的には、文字列が空であるか、特定の長さを超えているかをチェックします。

#include <iostream>
#include <string>
int main() {
    // ユーザーから文字列を入力
    std::string userInput;
    std::cout << "文字列を入力してください: ";
    std::getline(std::cin, userInput); // 入力を取得
    // 文字列の長さを取得
    size_t length = userInput.length(); // length()メソッドを使用
    // 条件に基づいてメッセージを表示
    if (length == 0) {
        std::cout << "入力された文字列は空です。" << std::endl; // 空文字列の場合
    } else if (length < 5) {
        std::cout << "入力された文字列は短いです。" << std::endl; // 5文字未満の場合
    } else {
        std::cout << "入力された文字列の長さは: " << length << " です。" << std::endl; // それ以外の場合
    }
    return 0;
}

プログラムの説明

  • ユーザーから文字列を入力するために、std::getline()を使用しています。

これにより、空白を含む文字列も正しく取得できます。

  • string::length()メソッドを使って、入力された文字列の長さを取得し、条件分岐でメッセージを表示します。
  • 入力された文字列が空の場合、短い場合、またはそれ以外の場合に応じて異なるメッセージを出力します。
文字列を入力してください: Hello
入力された文字列の長さは: 5 です。
  • このプログラムは、string::length()を利用してユーザーの入力を評価するシンプルな例です。
  • ユーザーが入力した文字列の長さに基づいて、適切なメッセージを表示することで、length()メソッドの実用性を示しています。

このように、string::length()は文字列の長さを簡単に取得できるため、さまざまなプログラムで活用することができます。

まとめ

この記事では、C++のstring::length()メソッドについて、その基本的な使い方やマルチバイト文字との関係、パフォーマンス、実践的なプログラム例を通じて、文字列の長さを取得する方法を詳しく解説しました。

length()メソッドは、非常に効率的であり、さまざまな場面で活用できるため、プログラミングにおいて重要な要素となります。

ぜひ、実際のプログラムに取り入れて、文字列操作のスキルを向上させてみてください。

関連記事

Back to top button