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);
}
関連ページ
- C++のファイル作成と実行
- 関数
- 名前空間
- 参照型
- 動的メモリ割り当て
- キャスト
- 例外処理
- クラス
- コンストラクタとデストラクタ
- 継承
- ポリモーフィズム
- テンプレート
- STL
- 文字列操作
- 演算子のオーバーロード