C++文字列操作

C++の文字列型について

string型(stringクラス)について

C++では、文字列を扱うために専用の変数として、string型(文字列型)が用意されるようになりました。

なお、string型や文字列型と呼ばれることもありますが、厳密にはstringクラスです。

stringクラスは以下のように、 basic_stringというテンプレートクラスをtypedefしています。


typedef basic_string<char> string;

従来のC言語では、文字列は文字配列として実現していたため、配列外へのアクセスを防ぐために注意を向ける必要がありました。

しかしc++ではstring型を利用することで、安全かつ容易に文字列を扱うことが可能になります。


string型の利用方法

string型を利用するためには、ヘッダファイルをインクルードする必要があります。


#include <string> 

string型は通常の変数のように用いることが可能です。

ただし、stringは実際にはクラスであるため、printf()を実行する場合にはC言語形式の文字配列に変換を行う必要があります。


#include <iostream>
#include <string>
using namespace std;

int main()
{
    // 文字列型の宣言
    string str1("c++ string type");   // 初期値を指定して宣言する。
    string str2 = "string valuable";  // 初期値を指定して宣言する(代入形式)。
    string str3;                      // 宣言のみ行う。

    // 文字列型の出力
    cout << str1 << endl;             // coutでそのまま出力できます。
    printf("%s\n", str2.c_str());     // printf()は型を変換する必要があります

    return(0);
}

std::stringの文字列操作について

演算子の利用

文字列のコピーは代入操作で行うことができます。


str1 = str2;

文字列を連結する場合には「+」または「+=」を用います。


str3 = str1 + str2;
str3 += str4;

文字列の比較にも演算子を用いることが可能です。


if(str1 == str2){ cout << "文字列が一致する" << endl; }
if(str1 != str2){ cout << "文字列が一致しない" << endl; }
if(str1 >  str2){ cout << "str1の方が長い" << endl; }
if(str1 <  str2){ cout << "str2の方が長い" << endl; }
if(str1 >= str2){ cout << "str1の方が長いまたは同じ" << endl; }
if(str1 <= str2){ cout << "str2の方が長いまたは同じ" << endl; }

stringクラスのメソッド

stringクラスのメソッドを利用することで、文字列操作が容易になります。

頻繁に利用するメソッドとして以下のものがあります。

指定 説明
empty() 文字列が空の時にtrueを返す
length() 文字列の長さを返す
replace() 文字列の中の文字を置換する
size() 文字列の文字数を返す

STLアルゴリズムの利用

stringクラスはSTLによって提供されていますので、STLのインターフェースが利用できます。


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    string str = "qwertyuiopasdfghjklzxcvbnm";

    // イテレータを利用する
    string::iterator ptr;

    // イテレータで全ての文字にアクセスする
    for(ptr = str.begin(); ptr != str.end(); ptr++){
        cout << *ptr << endl;
    }

    // findで文字を検索する
    ptr = find(str.begin(), str.end(), 'z');
    if(ptr != str.end()) cout << "found=" << *ptr << endl;

    // 文字を削除する
    str.erase(str.begin()+10, str.end()-10);
    cout << str << endl;

    return(0);
}

関連ページ