C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】文字列が指定した別の文字列で始まり、かつ終わっているかを判定する方法

問題概要

この記事では、2つの文字列 str と conStr が与えられたときに、「文字列 str が conStr で始まり、かつ conStr で終わっているか」を判定する方法を解説します。

入出力例

入力: str = "abcprogrammingabc"、conStr = "abc"

出力: True

この例では、文字列 str は先頭も末尾も "abc" で始まっており、条件を満たすため True が出力されます。

解決アプローチ

この問題を解くための手順は以下のとおりです。

まず、str と conStr のそれぞれの長さを求めます。もし str の長さが conStr の長さより短い場合は、接頭辞・接尾辞として conStr を含むことができないため、false を返します。

次に、str の先頭から conStr と同じ長さの部分文字列(接頭辞)と、末尾から同じ長さの部分文字列(接尾辞)を取り出し、それぞれが conStr と一致するかどうかを比較します。両方が一致すれば true、そうでなければ false を返します。

C++での実装例

以下は、上記のアプローチを実装したC++プログラムです。substr() 関数で部分文字列を取り出し、compare() 関数で一致を判定しています。

#include <bits/stdc++.h>
using namespace std;

bool isPrefSuffPresent(string str, string conStr) {
    
    int size = str.length();
    int consSize = conStr.length();
    if (size < consSize)
    return false;
    return (str.substr(0, consSize).compare(conStr) == 0 && str.substr(size-consSize, consSize).compare(conStr) == 0);
}

int main() {
    
    string str = "abcProgrammingabc";
    string conStr = "abc";
    if (isPrefSuffPresent(str, conStr))
       cout<<"The string starts and ends with another string";
    else
       cout<<"The string does not starts and ends with another string";
    return 0;
}

実行結果

The string starts and ends with another string

コードのポイント

str.substr(0, consSize) は文字列の先頭から consSize 文字を取り出す処理、str.substr(size - consSize, consSize) は末尾から consSize 文字を取り出す処理です。取り出した部分文字列がどちらも conStr と完全に一致した場合のみ、true が返されます。

この方法の計算量は O(n) であり、部分文字列の比較だけで判定できるため、非常にシンプルかつ効率的です。また、str と conStr が同じ文字列の場合や、conStr が空文字列の場合など、エッジケースの扱いにも注意して実装すると、より堅牢なコードになります。

  1. C++で線分のもう一方の端点を求める方法|一方の端点と中点から計算する

    問題概要この問題では、線分の一方の端点A(xA, yA)と中点M(xM, yM)の座標が与えられ、もう一方の端点Bの座標を求めることが課題となります。具体的な例で問題を確認しましょう。入力:A = [1, 2], M = [3, 0]出力:[5, -2]解説この線分は下図のように表されます。解法のアプローチこの問題は、数学で学んだ幾何学の知識を使えばシンプルに解くことができます。まず、線分の中点を求める基本公式を思い出しましょう。mid(x) = (x1 + x2) / 2 mid(y) = (y1 + y2) / 2しかし今回の問題では、中点の座標がすでに与えられており、むしろもう一方の端点

  2. C++で文字列の一部を別の文字列に置き換える方法を解説

    この記事では、C++において文字列の一部を別の文字列に置き換える方法を詳しく解説します。C++では文字列の置換が非常に簡単に行えます。標準ライブラリには string.replace() という便利な関数が用意されています。replace()関数の基本的な仕組みreplace() 関数は、指定した位置から始まる指定した長さの部分文字列を、新しい文字列で置き換えます。ただし、この関数単体では最初に見つかった1箇所のみが置き換えられる点に注意が必要です。文字列内に存在するすべての一致箇所を置き換えるには、ループ処理と組み合わせる必要があります。replace() 関数が受け取る引数は以下の3つです