안녕하세요 저는 구조 기반 프로젝트 인 연결된 목록에서 작업 중이며 거의 도움을 요청하지 않습니다. 하나의 문자열이 struct 데이터의 문자열의 일부일 때 연결된 목록에서 노드를 삭제해야합니다.문자열이 일치 할 때 연결된 목록의 노드 삭제
지금까지 나는 이것을 생각해 냈습니다. strstr()
을 사용하여 두 문자열에서 일치하는 항목을 찾을 수 있었지만 문자열 # 1이 문자열 # 2에 있으면 전체 프로그램이 실패했습니다.
void zmaz(STUFF *p_akt, STUFF *p_prv, STUFF *p_vymaz){
char meno_autor[100];
scanf("%s", meno_autor);
while(p_akt!=NULL) {
if(strstr(p_akt->autori,meno_autor)!=NULL){
printf("string %s is in %s\n", meno_autor, p_akt->autori);
p_vymaz=p_akt;
if (p_prv == p_vymaz){ //deleting the first node
p_prv = p_prv->p_dalsi;
}
else {
p_akt = p_prv;
while (p_akt->p_dalsi != p_vymaz) p_akt = p_akt->p_dalsi;
p_akt->p_dalsi = p_vymaz->p_dalsi;
}
free((void*)p_vymaz);
}
p_akt=p_akt->p_dalsi;
}
}
노드를 삭제하면 안되며 다음 노드도 이동시켜야합니다. 내가 할 수있는 한 모든 것을 설명하려고 노력했다. 고맙습니다! p_akt하는 p_vymaz을 할당하고 p_vymaz을 확보하여
while(){
if(){
...
p_vymaz=p_akt;
...
free((void*)p_vymaz);
}
p_akt=p_akt->p_dalsi;
}
당신은 해제 한 p_akt : 당신이 코드의 다음 순서를 만들기 때문에
디버거를 사용해보십시오. –