問題

ITP1_9_A | Aizu Online Judge

1つの単語 W と文章 T が与えられ、T の中にある W の数を出力するプログラムを作成する問題。

使ったもの

  • std::transform: すべての要素に関数を適用する。algorithm のインクルードが必要。
    • 日本語版リファレンス 1 を読んだけどちゃんと意味が分かっていない。 std::transform(str.begin(), str.end(), str.begin(), ::toupper); で文字列 str をすべて大文字に変換できるそう 2 なので使っている。
    • 形から入って少しづつ理解するように努める。

コード

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

int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    string W, T;
    int cnt=0;
    cin >> W;
    transform(W.begin(), W.end(), W.begin(), ::toupper);
    while (1) {
        cin >> T;
        if (T == "END_OF_TEXT") break;
        
        transform(T.begin(), T.end(), T.begin(), ::toupper);
        if (W == T) cnt++;
    }
    cout << cnt << endl;
    return 0;
}

感想

  • C++ の日本語版リファレンス 1 の読み方がわからん……パラメータってどこ見たらいいんだ。
  • 最初WもTもすべて大文字にしてから比較しようとしていたら、テストケースに小文字の end_of_text という入力があってそこで入力が止まってしまい WA になってしまった。今回は テストケース が見られる問題だったからバグに気づけたが、そうじゃない状況の方が多いから戦慄した。標準入力は操作する前に判定する癖をつけたいと思った。

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

  2. STLを使って文字列を小文字化 - minus9d&rsquo;s diary ↩︎