C ++链接列表问题与字符串

时间:2016-11-13 00:43:30

标签: c++ linked-list

我对C ++很新,目前正在尝试在用户可以设置的链接列表中插入电话号码和名称。我想知道我哪里出错了,我一直在看视频后视频但一切都是关于在链表中使用整数而不是字符串。

因此,如果main被取出,程序显示(0)错误和(0)警告,所以我认为问题是主要的。

所以主要是我试图cin nam(这是我在set_first的函数部分里面的东西)。我试过传递一个地址,但我想我只是在吸管。

所以问题是:任何人都可以指出我正确的方向,或者让我知道如何将名称和电话号码放入用户指定的节点中?

这是我迄今为止的主程序:

#include <iostream>
#include <cstdlib>
#include "l_List_1.h"

using namespace std;

int main()
{
    l_List_1 obr;

    std::string nam;
    cout << "name";
    cin >> nam;
    obr.set_first(nam); //I'm trying to give it the nam since that's what I have inside my set_first function.



return 0;
}

我的头文件如下所示:

#ifndef L_LIST_1_H
#define L_LIST_1_H


class l_List_1
{
public:
    l_List_1();
    void set_first(std::string nam, int phnum);
    void delete_Node(std::string del_nams, int num_del);
    void display();
    char menu();


private:
    typedef struct node {
        std::string user_Name;
        int user_Phone;
        node* next;
    }* nodeptr;

    nodeptr head;
    nodeptr curr;
    nodeptr tail;
    nodeptr temp;
};

#endif // L_LIST_1_H

我的cpp文件在这里:

#include <iostream>
#include <cstdlib>
#include <string>
#include "l_List_1.h"

using namespace std;


l_List_1::l_List_1()
{
    head = NULL;
    curr = NULL;
    tail = NULL;
}

void l_List_1::set_first(std::string nam, int phnum) {
    nodeptr n = new node;
    n->next = NULL;
    n->user_Name = nam;
    n->user_Phone = phnum;

    cout << "name";
    cin >> nam;

    if (head != NULL) {
        curr = head;
        while (curr->next != NULL) {
            curr = curr->next;
        }
        curr->next = n;
}
    else {
        head = n;
    }
}

void l_List_1::delete_Node(std::string del_nams, int num_del){
    nodeptr delptr = NULL;
    temp = head;
    curr = head;
    while(curr != NULL && curr->user_Name != del_nams && curr->user_Phone != num_del){
        temp = curr;
        curr = curr->next;
    }
    if(curr == NULL){
        cout << del_nams << "Was not in the list";
        cout << num_del << "was not in the list";
        delete delptr;
    } else{
        delptr = curr;
        curr = curr-> next;
        temp->next = curr;
        delete delptr;
        cout << "the item" << del_nams << "was deleted";
        cout << "the item" << num_del << "was deleted";
    }
}

void l_List_1::display(){
    curr = head;
    while(curr != NULL){
        cout << curr->user_Name;
        cout << curr->user_Phone << endl;
        curr = curr->next;
    }
}

1 个答案:

答案 0 :(得分:0)

对于初学者,成员函数set_first用两个参数声明

void set_first(std::string nam, int phnum);

但是你用一个参数调用它

obr.set_first(nam); 

在函数本身(以及删除节点的第二个函数)中,不设置列表的尾部。

还不清楚这些语句在函数中的作用

cout << "name";
cin >> nam;

你应该删除它们。

宣布以下数据成员

是没有意义的
nodeptr curr;
nodeptr temp;

而不是它们,你可以在方法中使用局部变量。

考虑到您应该包含标题<string>

#include <string>

我在程序中没有看到标题<cstdlib>中的内容。您可以删除标题。