C++文字列操作
C++の文字列型について
stringクラスについて
C++では、文字列を扱うために専用の変数として、stringクラスが用意されるようになりました。
従来のC言語では、文字列は文字配列として実現していたため、配列外アクセスを防ぐことに注意する必要がありました。
しかしC++ではstringクラスを利用することで、安全かつ容易に文字列を扱うことが可能になります。
このstringクラスは多言語におけるstring型や文字列型と同じような文字列を扱うための機能です。
内部動作的には以下のように、stringクラスはbasic_stringというテンプレートクラスをtypedefしています。
typedef basic_string<char> 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++言語
- オブジェクト指向
- 実用文法