string
概要
stringはstdに含まれている文字列用のクラスです。
このクラスを使用するには「string」をインクルードしますが、
「string」には「.h」をつける必要はないので注意してください。
std
stdはC++が標準で提供している関数やクラスをまとめたnamespaceです。
stringやvector、listなどがstdの中に含まれています。
宣言
まずは基本的な変数宣言の書式を紹介します。
// 書式例
std::string 変数名;
// 具体例
std::string str;
次に宣言時初期化の宣言書式です。
// 書式例
// 書式①
std::string 変数名 = 文字列;
// 書式②
std::string 変数名(文字列);
// 具体例
// 書式①
std::string str1 = "aaa";
// 書式②
std::string str2("bbb");
宣言時初期化は直接代入する書式とコンストラクタで初期化する書式があります。
文字列の代入と参照
この項目では変数宣言を行ったstringの代入と参照について説明します。
代入
stringはC言語の文字列とは異なり、宣言後も代入演算子を使用可能です。
以下のコードは上からstring使用、文字配列(エラー)、文字配列(成功)となっています。
// string
std::string str;
str = "aaa";
// 文字配列(エラー)
char str[32];
str = "aaaa"; // エラー
// 文字配列(成功)
char str[32];
strcpy_s(str, 32, "aaa");
上記のコードのように宣言後の変更が非常に簡単にできます。
参照
stringの参照は通常の変数と同じ扱いが可能です。
また、文字配列の場合ではできなかったstring同士の比較も可能となっています。
// string同士の比較
std::string str01 = "abc";
std::string str02 = "abc";
std::string str03 = str01;
if (str01 == str02 && str02 == str03)
{
printf("全部同じ文字列");
}
上のコードのようにstrcmp等の関数を使用しなくとも比較が可能です。
文字列の取得
printfの%sで出力する場合、型が異なるためにエラーとなります。
こういったstringに格納されている文字列をchar*として取得したい場合は
「c_str関数」を使用します。
c_str
内容 |
stringクラスで格納している文字列をchar*で返す |
戻り値の型 |
説明 |
const char* |
stringクラスで格納している文字列 |
// 使用例
std::string str = "aaa";
printf("%s\n", str.c_str());
上のコードのようにc_strを使用することでchar*型の対応が可能です。
その他の機能
ここではstringクラスの機能のいくつかを紹介します。
文字数取得
格納されている文字列の文字数を取得したい場合はsize関数を使用します。
size
内容 |
stringクラスで格納している文字列をchar*で返す |
戻り値の型 |
説明 |
size_t |
文字数 |
std::string str = "123";
printf("%d\n", str.size());
実行結果:
3
文字列の連結
二つの文字列を連結したい場合は「+」記号を使用するだけで連結可能です。
std::string str = "abc";
std::string str2 = "def";
std::string str3 = str + str2;
printf("%s\n" str.c_str());
str3 += "ghi";
printf("%s\n" str.c_str());
実行結果:
abcdef
abcdefghi
文字列、文字の追加
stringに文字列や文字を追加したい場合は「+=演算子」を使用します。
「push_back」でも追加可能ですが、文字のみなので演算子の方が使い勝手がいいと思います。
まずは演算子を使用した例です。
// +=演算子
std::string str = "abc";
str += "def";
printf("%s\n" str.c_str());
実行結果:
abcdef
次にpush_backを使用した例です。
push_back
内容 |
引数で指定されている文字を追加する |
引数の型 |
説明 |
char |
末尾に追加する文字 |
// +=記号
std::string str = "abc";
str.push_back('d');
printf("%s\n" str.c_str());
実行結果:
abcd
文字へのアクセス
文字列中の文字へアクセスしたい場合は配列同じように
[要素番号]でアクセスすることが可能です。
std::string str = "abcd";
str[0] = 'b';
printf("%s", str.c_str());
実行結果
bbcd