在数组中搜索字符串

时间:2015-12-14 01:54:15

标签: c++

我正在为c ++制作电话簿程序,但我无法将搜索功能转移到我的主要功能中。当我编译它并搜索名称时,它会使程序崩溃。

搜索功能:

int search(string name){
    for(int i=0; i<counter; i++){
        if(data[i][0] == name){
        return i;
        }
            else{
            cout << "Name not found" << endl;
            }
    }

}

主要功能:

int main(){
    bool done = false;
    int choice;
    string name;
    string areaCode;
    string number;

    load_contacts("contacts.txt");

    cout << "Welcome to AddressBook" << endl;

    while(!done){

        cout << "What would you like to do?" << endl;
        cout << "1) Display all contacts" << endl;
        cout << "2) Add a contact" << endl;
        cout << "3) Remove a contact" << endl;
        cout << "4) Search a contact" << endl;
        cout << "5) Exit" << endl;
        cin >> choice;

        switch (choice){

            case 1:
            display_contacts();

            break;

            case 2: 
            add_contacts(name, areaCode, number);
            cout << "Contact Added!";
            cout << endl;


            break;

            case 3:
            cout << "Name to remove: ";
            cin >> name;  
            remove_contacts(name);          

            break;

            case 4:
            cout << "Name to search: ";
            cin >> name;
            search(name);

            break;

            case 5: cout << "Good bye." << endl;
            done = true;

            break;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您发布的代码存在一些问题,主要是由于调用了未定义的变量。

1:对于您的搜索方法,counter无处不在,并被用作循环的数字限制器。

2:同样在您的搜索方法中,2D数组data也是未定义的,除非它是load_contacts方法设置的全局变量,而不是&#39;正在显示,所以目前你正在搜索一个不存在的二维数组。

3:您的"Name not found"消息位于方法for循环中的else语句中,因此每次循环找不到时都会执行名称。您可能希望将其移动到循环外部进行打印,然后返回错误编号,可能会-1以便稍后处理。

4:您的search方法是int的返回类型,但是在main中,您没有将返回值分配给任何变量使用,所以如果搜索成功,什么都不会发生。

如果我对其中任何一个都不正确,请告诉我,但我会首先关注明显的错误,看看它们是否导致崩溃。