AtCoderやPaizaなどの競技プログラミングでは、文字列の操作に関する問題が多く掲載されています。そこで、本記事ではC++での文字列処理ができる、std::stringクラスについて解説します。
C++のstd::string とは
C++では、文字列を扱うための変数として、std::stringクラスが用意されています。std::stringクラスを用いることで、string型(文字列型)の宣言だけでなく、文字列の長さを取得できたり、文字の挿入削除などもできます。
std::stringの基本的な使い方
ここでは、std::stringの基本的な使い方として、文字列の代入から、出力までの一連の流れを説明します。
説明に使うコード
ここでは、以下のコードを例として説明します。
タイトル:sample.cpp
#include<iostream> #include<string> //stringクラスを使用可能にする using namespace std; int main() { string str = "Code Database"; //宣言・代入 cout << str << endl; //出力 }
はじめに(インクルード)
文字列処理ができる、std::stringクラスを取り扱うには、#include<string>
します。コードの冒頭でusing namespace std;
と宣言することで、main関数中でstd::
の記述を省略することができます。
#include<iostream> #include<string> //stringクラスを使用可能にする using namespace std;
宣言・出力
文字列の型を宣言するには以下のようにstring str
と記述します。
また、文字列を代入するためには、代入したい文字列にシングルクォーテーション(‘’)またはダブルクォーテーション(“”)で値を囲むことが必要です。
string str = "Code Database"; //宣言・代入
では、実際に出力してみましょう。以下のコードを用いるとCode Database
と出力されるはずです。
cout << str << endl; //出力
文字列の内容を取得について
文字数の取得(size())
文字列の長さを取得したい場合、size()で取得することができます。
タイトル:string_length.cpp
#include<iostream> #include<string> using namespace std; int main() { string str1 = "Code Database"; string str2 = "Code"; cout << str1 << endl; cout << str2 << endl; cout << str1.size() << endl; cout << str2.size() << endl; cout << str1.length() << endl; cout << str2.length() << endl; }
タイトル:result
Code Database Code 13 4 13 4
文字列が空かどうか調べる(empty())
文字列が空かどうか判定したい場合、empty()を用いて判別することができます。
またこの時、空である時は"1"、空でない時は"0"を返します。
タイトル:empty.cpp
#include<iostream> #include<string> using namespace std; int main() { string str1 = "Code Database"; string str2 = ""; cout << str1 << endl; cout << str2 << endl; cout << str1.empty() << endl; cout << str2.empty() << endl; }
タイトル:result
Code Database 0 1
文字の検索(find())
ある文字列から検索したい文字列がある時は、find()を使います。
以下のコードのように、"Code Database"からfind()を使って、"D"の文字を検索するとき、先頭を0として数えた"D"の位置(5)になります。また、文字列が見つからなかった場合、"18446744073709551615"という数字が出てきますがこれはstring::nposという値になります。
タイトル:string_find.cpp
#include<iostream> #include<string> using namespace std; int main() { string str1 = "Code Database"; string str2 = "Code"; cout << str1.find("D") << endl; cout << str1.find("F") << endl; cout << (str1.find("F") == string::npos) << endl; }
タイトル:result
5 18446744073709551615 1
文字列の基本的な編集について
文字列の連結(+)
文字列の連結に足し算のように+でつなげることができます。
タイトル:string_plus.cpp
#include<iostream> #include<string> using namespace std; int main() { string str1 = "Code"; string str2 = "Database"; cout << str1+str2 << endl; }
タイトル:result
CodeDatabase
文字列の分割(substr())
文字列を分割する場合、substr()を使います。
またsubstr(x)としたとき、x番目以降の文字列を取り出すことができます。
またsubstr(x,y)としたとき、x番目以降のy文字分取り出すことができます。
また、substr()はfind()と組み合わせて文字の位置を検索し、分割することもできます。
タイトル:string_substr.cpp
#include<iostream> #include<string> using namespace std; int main() { string str1 = "Code Database"; cout << str1.substr(5) << endl; cout << str1.substr(str1.find("D")) << endl; cout << str1.substr(5,3) << endl; }
タイトル:result
Database Database Dat
文字列の削除(erase())
文字列を削除する場合、erase()を使います。
またerase(x)としたとき、x番目以降の文字列を削除することができます。
またerase(x,y)としたとき、x番目以降のy文字分削除することができます。
また、erase()はfind()と組み合わせて文字の位置を検索し、分割することもできます。
タイトル:string_erase.cpp
#include<iostream> #include<string> using namespace std; int main() { string str1 = "Code Database"; string str2 = str1.erase(5); str1 = "Code Database"; string str3 = str1.erase(str1.find("D")); str1 = "Code Database"; string str4 = str1.erase(5,2); cout << str2 << endl; cout << str3 << endl; cout << str4 << endl; }
タイトル:result
Code Code Code tabase
文字列の挿入(insert())
文字列を挿入する場合、insert()を使います。
またinsert(x,y)としたとき、x番目の文字の前に文字列yを挿入することができます。
また、insert()はfind()と組み合わせて文字の位置(x)を検索し、x番目に挿入することもできます。
タイトル:string_insert.cpp
#include<iostream> #include<string> using namespace std; int main() { string str1 = "Code"; string str2 = str1.insert(4,"Database"); str1 = "Code"; string str3 = str1.insert(str1.find("e")+1,"Database"); cout << str2 << endl; cout << str3 << endl; }
タイトル:result
CodeDatabase CodeDatabase
文字列の置換(replace())
文字列を置換する場合、replace()を使います。
また、replace(x,y,z)としたとき、x番目からy文字分の文字列をzに置換します。
タイトル:string_replace.cpp
#include<iostream> #include<string> using namespace std; int main() { string str1 = "Code Database"; string str2 = str1.replace(5,4,"X"); cout << str2 << endl; }
タイトル:result
Code Xbase
まとめ
本記事ではC++のstd::stringの基本的な使い方を紹介しました。最後に要点をまとめます。
- std::stringクラスを用いることで、文字列を扱うことができる
- 文字列の宣言だけでなく、文字列の長さを取得できたり、文字の挿入削除などもできる
皆さんもぜひ文字列を活用しましょう!!