spadyのメモ帳

技術ブログにしたいけどどうなることやら。まだ素人

JOI2019/2020 一次予選第三回 B問題解説

キャピタリゼーション

問題

問題文

JOI 君は長さNの文字列 S を見つけた. S に含まれる文字はすべて英小文字である. JOI 君はこの文字列から自分の名前である'joi'が連続している部分を先頭から順にすべて探しだすことにした.そして' joi'を見つけるたびに,強調のためにそれを大文字の'JOI'に置き換えることにした.

文字列S が与えられたとき,S に含まれる' joi' をすべて 'JOI 'に置き換えた文字列を出力するプログラムを作成せよ.

制約

3≦N≦100 Sは長さNの文字列である. Sは英小文字からなる.

入力

N
S

※問題文、制約、入力の情報は日本情報オリンピック委員会に帰属し、CC4.0 BY-SAで提供されています。また本記事はCC4.0 BY-SAを継承しています。

解説

ループを回して、ループごとにif文で文字がj,次がoか,つその次がiであるかどうかを確認する。

ループブロック中でif文を抜けた後にS[回数]を出力すると短くできる。

ACコード

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

int main(){
    int N;
    string S;
    cin >> N >> S;
    for(int i=0;i < N;i++){
        if(S[i] == 'j' && S[i+1] == 'o' && S[i+2] == 'i'){
            S[i] = 'J';
            S[i+1] = 'O';
            S[i+2] = 'I';
        }
        cout << S[i];
    }
}