こんにちは.
いつもお世話になっております.
早速ですが,質問させていただきます.
AtCoderのbeginners selectionというところに乗っていた問題でABC049C白昼夢/Daydreamというものがありまして,これを解いてみたのですが,不正解でした.
しかし,なにがいけないのかわからないんです.何度も実行してみても問題の要求する通りのものができているとしか思えないのです.
どなたか私の間違いを見つけて教えていただければ幸いです.
問題文は以下のようになっています.
https://beta.atcoder.jp/contests/abs/tasks/arc065_a
私が書いたコードはこちらになります.
C++
1 2#include <string> 3#include <iostream> 4 5using namespace std; 6 7void erase(string* s, int n){ 8 (*s).erase((*s).begin() + 0, (*s).begin() + n); 9} 10 11 12int main() 13{ 14 string strs, strt; 15 16 cout << "文字列S : "; cin >> strs; 17 18 19 20 bool answer = true; //最後の判定に使う 21 while(strs.size() != 0){ 22 23 //---最初の5文字がdreamでもeraseでもない場合---// 24 if ((strs.substr(0, 5) != "erase") && (strs.substr(0, 5) != "dream")){ 25 answer = false; 26 break; 27 } 28 29 //---最初の5文字がdreamの場合---// 30 if (strs.substr(0, 5) == "dream"){ 31 //---dreamの次にerが続く場合---// 32 if (strs.substr(5, 2) == "er"){ 33 if (strs.substr(5, 5) == "erase") 34 erase(&strs, 5); //eraseが続く場合はdreamのみ消去 35 else//if (strs.substr(5, 5) != "erase") 36 erase(&strs, 7); //erが続くがeraseではなかった場合はdreamerを消去 37 } 38 else{ 39 erase(&strs, 5); //dreamを消去 40 } 41 } 42 43 //---最初の5文字がeraseの場合---// 44 if (strs.substr(0, 5) == "erase"){ 45 //---eraseの次にrが続く場合---// 46 if (strs[5] == 'r'){ 47 erase(&strs, 6); //eraserを消去 48 } 49 //---rが続かない場合---// 50 else 51 erase(&strs, 5); //eraseを消去 52 } 53 } 54 55 if (answer) 56 cout << "YES\n"; 57 else 58 cout << "NO\n"; 59} 60
どうぞよろしくお願いします.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/19 15:56