C++で2つの文字列を比較する方法を徹底解説
C++における文字列比較の基本
C++では、標準ライブラリに用意されている std::string クラスを使うことで、文字列を簡単に扱うことができます。文字列同士を比較する際には、compare() 関数が便利です。この関数は、2つの文字列の文字を先頭から1文字ずつ順番に照合し、不一致があれば非ゼロの値を返します。戻り値の意味は以下のとおりです。
- 0:2つの文字列が完全に一致している
- 正の値:呼び出し元の文字列(s1)が引数の文字列(s2)より辞書順で大きい
- 負の値:呼び出し元の文字列(s1)が引数の文字列(s2)より辞書順で小さい
なお、比較では大文字と小文字が区別される点に注意してください。例えば「l」(小文字のエル)と「L」(大文字のエル)は、異なる文字として扱われます。それでは、実際のコードを見てみましょう。
サンプルコード
#include<iostream>
using namespace std;
void compareStrings(string s1, string s2) {
int compare = s1.compare(s2);
if (compare != 0)
cout << s1 << " is not equal to "<< s2 << endl;
else if(compare == 0)
cout << "Strings are equal";
if (compare > 0)
cout << s1 << " is greater than "<< s2 << " difference is: " << compare << endl;
else if(compare < 0)
cout << s2 << " is greater than "<< s1 << " difference is: " << compare << endl;
}
int main() {
string s1("hello");
string s2("helLo");
compareStrings(s1, s2);
}
実行結果
hello is not equal to helLo
hello is greater than helLo difference is: 1
コードの解説
この例では、「hello」と「helLo」という2つの文字列を比較しています。4文字目の「l」と「L」が異なるため、両者は等しくないと判定されます。ASCIIコードでは大文字の「L」(10進数で76)は小文字の「l」(10進数で108)よりも小さい値を持つため、「hello」の方が「helLo」より辞書順で大きいと判断され、差分として1が返されています。
まとめ
C++で文字列を比較する場合は、compare() 関数を使うことで、単純な一致判定だけでなく、どちらが辞書順で大きいか(小さいか)まで確認できます。単に等しいかどうかを調べたいだけであれば、比較演算子の == や != を使う方法もあります。用途に応じて使い分けるとよいでしょう。
-
C++で2つの文字列の共通しない文字を検索・抽出する方法
はじめに本記事では、C++を使用して2つの文字列に共通しない文字(アンコモン・キャラクター)を見つけるプログラムについて解説します。具体的には、2つの文字列が与えられたとき、どちらか一方の文字列にのみ含まれる文字を抽出し、アルファベット順にソートして出力するのが目的です。問題の概要入力として2つの文字列を受け取り、次の条件を満たす文字を出力します。片方の文字列には存在するが、もう片方には存在しない文字出力はアルファベット順(a〜z)にソートされていること例えば、「tutorials」と「point」という2つの文字列が与えられた場合、共通しない文字は「a l n p r s u」となります。ア
-
C++で2つの2進数文字列を加算するプログラムの書き方
2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁