引き続き、C++でB問題を解いていきます。
ABC B058 – ∵∴∵
問題
すぬけ君は新しくできたプログラミングコンテストに会員登録しました。 登録に使ったパスワードを覚えておく自信が無かったすぬけ君は、 手元の紙にパスワードをメモしておくことにしました。 ただし、そのままメモをすると誰かにパスワードを盗まれてしまうかもしれないので、 文字列の偶数番目の文字と奇数番目の文字をそれぞれ別々の紙にメモしておくことにしました。
パスワードの奇数番目の文字だけを順番を変えずに取り出した文字列Oと、 偶数番目の文字だけを順番を変えずに取り出した文字列Eが与えられます。 すぬけ君のかわりにパスワードを復元してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main () {
string O, E;
cin >> O >> E;
string pass = "";
for(int i = 0; i < max(O.size(), E.size()); i++){
pass += O[i];
pass += E[i];
}
if(O.size() < E.size()){
pass.erase(O.size() + E.size() - 1, 1);
cout << pass << endl;
}else{
pass.erase(O.size() + E.size(), 1);
cout << pass << endl;
}
}
とりあえず、文字数の多い方に合わせて、passに代入していきます。問題はそこからで、文字列OとEの文字数が違う場合、どちらが文字数が多いかによって処理を変えなければなりません。
Eの方が文字数が多い場合、最後から二番目に空白が挿入されてしまうので、それを除去してから出力します。
逆にOの方が文字数が多い場合、文字列の一番最後に空白が挿入されているので、それを削除します。
EとOの文字数が同じ時はO.size() + E.size()の値が文字列よりも大きくなるので、何も起こらず、そのまま出力されてくれます。
O.size() < E.size()の時
=> OEOE E
となるので、後ろから二番目の空白を削除している。
O.size() < E.size()の時
=> OEOEO␣
どうも、最後にスペースが入っているみたい?なので、そのスペースを削除します。
O.size() = E.size()の時は、O.size()+E.size()の値が文字列外になるので、何も起きないので、問題ありません。