01/10/2018, 12:14
Lỗi out of range c++
Nó báo lỗi như này là sao ạ?
terminate called after throwing an instance of ‘std::out_of_range’
what(): basic_string::at: __n (which is 0) >= this->size() (which is 0)
link hackkerrank: https://www.hackerrank.com/challenges/reduced-string/problem
> #include <bits/stdc++.h>
> using namespace std;
> string super_reduced_string(string s){
> // Complete this function
> int count = -1;
> for(int i=0;i<s.length()-1;i++) if(s.at(i)==s.at(i+1)){ count = i; break;}else{count=-1;}
> while(count != -1){
> s.erase(count,2);
> for(int i=0;i<s.length()-1;i++) if(s.at(i)==s.at(i+1)){ count = i;break;}else{count=-1;}
> }
> return s;
> }
> int main() {
> string s;
> cin >> s;
> string result = super_reduced_string(s);
> cout << result << endl;
> return 0;
> }
Bài liên quan
Chỗ này
count == -1 thì sao?
Có vẻ như bạn chạy vòng while đến mức xâu s rỗng. Bạn thử in ra s sau vòng for xem sao.
Bài này có thể giải trong O(n) time và space, và ít phức tạp hơn.
Truy cập phần tử ngoài khoảng cho phép
Ví dụ như khi string.length = 5 mà bạn lại truy cập s[7] hoặc s[i] với i<0 thì sẽ bị như thế
Cảm ơn mọi người em fix được rồi. Thứ 1 là do s.length()-1 chỉ nhận giá trị dương mà -1<0 nên nó bị lỗi. Thứ 2 là sau dòng s.erase() em quên gán count = -1 nên nó lặp vô tận khi vòng for phí dưới không thục hiện.