問題

ITP1_8_D | Aizu Online Judge

リング上の文字列 s の任意の位置から、時計回りに連続した文字列で p が作れるか判定する。

使ったもの

  • std::basic_string::find 1:
    • s2.find(p) という形で、s が2つ連なった文字列に p が含まれているかどうかを判定した
  • std::string::npos:
    • 上記関数で文字列が検索にヒットしなかった場合の戻り値 2

コード

#include <iostream>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    string s,p,s2="";
    cin >> s >> p;
    s2 = s + s;
    if (s2.find(p) == string::npos) cout << "No" << endl;
    else cout << "Yes" << endl;
    return 0;
}

感想

ITP1_8_Dの「言語解説」にはC言語の解説が書かれているが、C++についての情報が少なく少し不親切に感じた。

あとがき

Hugo 0.60 以降で「リンクを新しいタブで開く」方法 | mobiusone.org を参考にして、このブログ内のリンクを別タブで開けるようにした。 良質な情報シェアをありがとうございます。


  1. basic_string::find - cpprefjp C++日本語リファレンス ↩︎

  2. C++の文字列2(C++) - 超初心者向けプログラミング入門 ↩︎