0

問題: ノードを削除する際に問題に直面しています。最初に挿入する方法を教えてください。Student LinkList があり、各ノードには ID(Int) と Student Name(String) があり、ノードを挿入するコードがあります。リストはこれです:

void FileHandling::readLine(char filePath[], StudentList* sl1){

ifstream read_file;
string line;
read_file.open(filePath, std::ifstream::in);

if(read_file.is_open()){
        while(read_file.good()){
            getline(read_file,  line);
            if(line.substr(0,1)!= "#" && !line.empty() ){
                //cout<<line<<endl;

                std::stringstream ss(line);
                int id;
                std::string first_name, surname;
                ss >> id >> first_name >> surname;
                std::string name = first_name + " " + surname;
                //cout<< id <<", "<<name<<endl;
                sl1->insertSort(id,name); // insert node in an alphabetic order
            }
        }
}

}

これは、ユーザーから名前を取得して削除する必要がある方法です。「abc xyz」のような名前を取得すると、string name;変数には xyz のみが含まれ、最初の名前はスキップされます。

void StudentList::deleteWN(StudentList* sl1){
//Deleting from list by getting name from user
string name;
while(true){
    cout << "Deleting: Student Name 0r press 'q' to quit"<<endl;
    cin >> name;
    cout<<name<<endl;
    if(name=="q")
        break;
    sl1->deleteWithNmae(name);
    sl1->printList();
}

}

void StudentList::deleteWithNmae(const string& name1){

// CASE 1: Deleting from an empty list
if(head == 0){
    cout<< "Node can not be deleted from an Empty List"<<endl;
}else{
// Traversing the list to find Exact Node
    Student* curr = head;
    Student* prev = 0;
    while(curr != 0){
        if(curr->name == name1){
            // node found, break the while loop
            // Never compare the name of curr node with the user input
            // i also tried curr->name.length() == name1.length() 
            //and comparing the strings but i m sure i m doing something
            // wrong here and cant find my node in any case.

            break;
        }else{
            prev = curr;
            curr = curr->next;
        }
    }
    // CASE 2: Node not found
    if(curr == 0){
        // always execute this code, i never able to find my node
        cout<< "Student "<<name1<<" not Found .."<<endl;
    }else{
            //CASE 3: Deleting node from the head
        if(curr == head){
            head = head->next;
        }else{
            //CASE 4: Deleteing node beyond the head
            prev->next = curr->next;
        }
        delete curr;
        size--;
    }

}

}

この問題を解決してください。よろしくお願いします。

4

2 に答える 2

1

あなたはすでに挿入コードで正しいことをしています。ここでの唯一の違いは、最初の名前を読んだ後に "q" をチェックする必要があることです。「q」でない場合は、姓を読むことができます。このような

void StudentList::deleteWN(StudentList* sl1){
//Deleting from list by getting name from user
string firstName, lastName;
while(true){
    cout << "Deleting: Student Name 0r press 'q' to quit"<<endl;
    cin >> firstName;
    if(firstName=="q")
        break;
    cin >> lastName;
    std::string name = first_name + " " + surname;
    sl1->deleteWithNmae(name);
    sl1->printList();
}
于 2013-09-17T09:51:30.073 に答える