std::string同士の比較は、比較演算子(==, !=)を使うのが簡単ですが、部分的に比較したい場合や大小関係を調べたい場合にはcompareメンバ関数やstd::equal()関数を使用します。
比較演算子(== or !=)
std::string文字列全体の一致・不一致を調べる場合、比較演算子が一番使いやすくシンプルだと思います。
std::string s1 = "abc";
std::string s2 = "abc";
std::string s3 = "abcdef";
s1 == s2; // true 一致
s1 != s3; // true 不一致
「==」は一致の場合trueで不一致の場合falseになり、「!=」は一致の場合falseで不一致の場合trueになります。
compareメンバ関数
文字列の大小関係を比較します。戻り値はint型で、一致した場合は0が返り、不一致の場合は正の値か負の値が返ります。
std::string s = "b";
s.compare("a"); // 1 (不一致:自身のが大きい)
s.compare("b"); // 0 (一致)
s.compare("c"); // -1 (不一致:自身のが小さい)
s.compare("bb"); // -1 (文字自体は一致しているが長さが自身のが小さい)
std::equal関数
イテレータを使用して比較することができます。
std::string s1 = "abc";
std::string s2 = "abcdef";
std::equal(s1.begin(), s1.end(), s2.begin()); // true
std::equal(s2.begin(), s2.end(), s1.begin()); // false
std::equal(s2.begin(), s2.begin()+3, s1.begin()); // true
std::equal(s1.begin(), s1.end(), s2.begin(), s2.begin()+2); // false
第一引数に検索対象の開始位置、第二引数に検索対象の終了位置を指定して、第三引数に検索したい文字列の開始位置を指定します。
第四引数には、検索したい文字列の終了位置を指定することが可能です。
おまけ:大文字小文字の区別無く比較する
アルファベットは大文字小文字の区別なく比較したい時もあります。そんな時はstricmpを使用します。
std::string s1 = "abc";
std::string s2 = "ABC";
stricmp(s1.c_str(), s2.c_str()); // 0
stricmpは、どちらの文字列も比較の前に小文字に変換されて比較されます。