C++の文字列ライブラリを使って文字列照合を行うプログラムの実装方法
この記事では、C++の文字列ライブラリ関数を活用して文字列照合(パターンマッチング)を行う方法を解説します。メイン文字列の中から部分文字列が出現する位置を取得するために、find()関数を使用します。find()メソッドは、指定した文字列が最初に見つかった位置を返すため、この関数を繰り返し呼び出すことで、すべての一致箇所を検出できます。
なお、文字列が見つかった場合はその位置(インデックス)が返されますが、見つからなかった場合は string::npos が返されます。この仕組みを利用することで、検索の終了条件を簡単に判定できます。
入力:メイン文字列 "aabbabababbbaabb"、部分文字列 "abb" 出力:部分文字列が見つかった位置 [1, 8, 13]
アルゴリズム
String_Find(main_str, sub_str)
入力 − メイン文字列と、検索対象の部分文字列
出力 − メイン文字列内における部分文字列の位置
pos := 0 while 文字列の pos から末尾までの範囲で sub_str の最初の出現位置 index が見つかる間、繰り返す 一致が見つかったので index を出力する pos := index + 1 end while
サンプルコード
#include<iostream>
using namespace std;
main() {
string str1 = "aabbabababbbaabb";
string str2 = "abb";
int pos = 0;
int index;
while((index = str1.find(str2, pos)) != string::npos) {
cout << "Match found at position: " << index << endl;
pos = index + 1; // 次の検索開始位置は、見つかった位置の次の要素から
}
}実行結果
Match found at position: 1 Match found at position: 8 Match found at position: 13
このように、検索開始位置を前回の一致位置の次に更新しながら find() を呼び出し続けることで、オーバーラップする一致箇所も含めてすべて検出できます。処理は string::npos が返された時点で終了します。
-
C++プログラムから外部アプリケーション(メモ帳など)を起動する方法
この記事では、C++プログラムを使ってメモ帳(Notepad)などのサードパーティ製アプリケーションを起動する方法を解説します。実装は非常にシンプルで、コマンドプロンプトで使うコマンドをそのままC++から呼び出すだけで実現できます。ポイントとなるのは、標準ライブラリの system() 関数です。この関数の引数にアプリケーション名(コマンド)を文字列として渡すと、OSがそのコマンドを実行し、対応するアプリケーションが起動します。サンプルコード#include <iostream> using namespace std; int main() { cout <<
-
C++で再帰を使って文字列(文)を反転表示する方法
文字列とは、NULL文字(\0)で終端される1次元の文字配列のことです。文字列の反転とは、同じ文字列を逆順に並べたものを指します。例えば以下のようになります。 元の文字列: Apple is red 反転後の文字列: der si elppA ここでは、再帰(リカーション)を利用して、文字列として与えられた文を反転して表示するC++プログラムを紹介します。 プログラム例 #include <iostream> using namespace std; void reverse(char *str) { if(*str == \0) return;