請各位大神幫幫我TAT
自己測試沒問題
CODE如下:
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;
int main(){
bool a;
string str;
int i;
while(getline(cin,str)){
a=1;
for(i=0;i<=str.length()/2+1;i++){
if(str.at(i)!=str.at(str.length()-1-i)){
a=0;
break;
}
}
if(a==1)cout<<"yes"<<endl;
else cout<<"no"<<endl;
str.clear();
}
}
RE的訊息如下:
第 1 測資點(100%): RE (SIGABRT)
執行時期錯誤
系統呼叫了 abort 函式! terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::at: __n (which is 2) >= this->size() (which is 2) Aborted (core dumped)
請各位大神幫幫我TAT
自己測試沒問題
CODE如下:
#include
#include
#define endl '\n'
using namespace std;
int main(){
bool a;
string str;
int i;
while(getline(cin,str)){
a=1;
for(i=0;i<=str.length()/2+1;i++){
if(str.at(i)!=str.at(str.length()-1-i)){
a=0;
break;
}
}
if(a==1)cout<<"yes"<<endl;
else cout<<"no"<<endl;
str.clear();
}
}
RE的訊息如下:
第 1 測資點(100%): RE (SIGABRT)
執行時期錯誤
系統呼叫了 abort 函式! terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::at: __n (which is 2) >= this->size() (which is 2) Aborted (core dumped)
剛剛測試發現
把if(str.at(i)!=str.at(str.length()-1-i))改成if(str[i]!=str[str.length()-1-i])即可
可是為甚麼阿...
照你迴圈的寫法
如果輸入是2個相同的字元
例如說11, aa之類的(假設是str)
他只有str[0], str[1]
但是你的迴圈會跑到str[2]和str[一個很大的數字]比較
用at會自動檢查邊界
所以才會RE
但是用[]
不會檢查邊界
至於str[2]和str[一個很大的數字]是否相等
可能是要看系統
我也不確定