이것은 내 첫 번째 게시물입니다. 내가 초보자 인 것처럼 문제는 어리 석을 수 있습니다. 다음과 같은 오류 메시지가 표시 동안 내가terminate 'std :: length_error'의 인스턴스를 던진 후에 호출됩니다.
은 '표준 : length_error'
의 인스턴스를 던지는 후 호출 종료 코드의 조각을 쓰고 있었는지() : : : _ basic_string S_create
/홈/gcj/finals/home/gcj/quals Aborted
다음은 잘못된 코드입니다. 39 번째 라인부터 52 번째 라인까지입니다.이 코드 블록은 Line64에서 Line79까지와 거의 동일하므로 필자의 입장에서 생각해보십시오. 이를 반복하면서
int main(){
std::vector<std::string> dirs, need;
std::string tmp_str;
std::ifstream fp_in("small.in");
std::ofstream fp_out("output");
std::string::iterator iter_substr_begin, iter_substr_end;
std::string slash("/");
int T, N, M;
fp_in>>T;
for (int t = 0; t < T; t++){
std::cout<<" time "<< t << std::endl;
fp_in >> N >> M;
for (int n =0; n<N; n++){
fp_in>>tmp_str;
dirs.push_back(tmp_str);
tmp_str.clear();
}
for (int m=0; m<M; m++){
fp_in>>tmp_str;
need.push_back(tmp_str);
tmp_str.clear();
}
for (std::vector<std::string>::iterator iter = dirs.begin(); iter!=dirs.end(); iter++){
for (std::string::iterator iter_str = (*iter).begin()+1; iter_str<(*iter).end(); ++iter_str){
if ((*iter_str)=='/') {
std::string tmp_str2((*iter).begin(), iter_str);
if (find(dirs.begin(), dirs.end(), tmp_str2)==dirs.end()) {
dirs.push_back(tmp_str2);
}
}
}
}
for (std::vector<std::string>::iterator iter_tmp = dirs.begin(); iter_tmp!= dirs.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
dirs.clear();
std::cout<<std::endl;
std::cout<<" need "<<std::endl;
//processing the next
for (std::vector<std::string>::iterator iter_tmp = need.begin(); iter_tmp!=need.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
std::cout<<" where ";
for (std::vector<std::string>::iterator iter = need.begin(); iter!=need.end(); iter++){
for (std::string::iterator iter_str = (*iter).begin()+1; iter_str<(*iter).end(); ++iter_str){
if ((*iter_str)=='/') {
std::string tmp_str2((*iter).begin(), iter_str);
if (find(need.begin(), need.end(), tmp_str2)==need.end()) {
need.push_back(tmp_str2);
}
}
}
}
for (std::vector<std::string>::iterator iter_tmp = need.begin(); iter_tmp!= need.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
need.clear();
std::cout<<std::endl;
//finish processing the next
}
for (std::vector<std::string>::iterator iter= dirs.begin(); iter!=dirs.end(); iter++)
std::cout<<*iter<<" ";
std::cout<<std::endl;
for (std::vector<std::string>::iterator iter= need.begin(); iter!=need.end(); iter++)
std::cout<<*iter<<" ";
std::cout<<std::endl;
fp_out.close();
}
안부
, 마크
39-52 행에 표시하십시오. SO에 줄 번호가 없습니다. – kennytm
"dirs"와 "need"가 고유하다는 것을 강요하기 위해 많은 일을하고있는 것처럼 보입니다. 아마'vector'에서'set'으로 바뀔 수도 있고, 자동으로 할 것입니다. – Stephen
사람들은 쉽게하지 않으면 도움을주지 않을 것입니다. 1) 코드가 완전하지 않아 컴파일되지 않습니다. 2) 동일한 입력 파일이 없으면 어떻게 테스트 할 수 있습니까? 3) 줄 번호는 다른 사람의 줄 번호와 일치하지 않을 수 있습니다 (잘못된 코드를 주석으로 표시하십시오). –