teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

範囲外アクセスエラーの可能性について追記

2020/05/21 16:52

投稿

ohys
ohys

スコア147

answer CHANGED
@@ -1,3 +1,14 @@
1
1
  末尾3文字だけで判定してしまっているのが問題です。
2
2
 
3
- そのコードだと、例えば`hogemer`という文字列に対して`a == "mer"`がtrueになってしまいます。5文字、6文字、7文字と切り取ってみて判定するようにしてみてください。
3
+ そのコードだと、例えば`hogemer`という文字列に対して`a == "mer"`がtrueになってしまいます。5文字、6文字、7文字と切り取ってみて判定するようにしてみてください。
4
+
5
+ **追記**
6
+
7
+ 末尾をn文字切り取る時に、Sがn文字に足りなかったら範囲外アクセスのエラーになります。
8
+
9
+ 例えば`S = "ab"`という文字列に対して`S.substr(n-3, 3);`を行おうとすると(私の環境では)`libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string`というエラーが出ます。
10
+
11
+ 文字を切り取る前に、文字列の長さが足りているかも考えなくてはいけないです。
12
+
13
+ ↓AC回答です。手詰まりになったら覗いてみてください
14
+ https://atcoder.jp/contests/abs/submissions/13463383