在数组中搜索字符串

Search for a string within an array

本文关键字:字符串 搜索 数组      更新时间:2023-10-16

我正在为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:对于您的搜索方法,counter突然出现,并被用作循环的数字限制器。

2:此外,在您的搜索方法中,2D数组data也是未定义的,除非它是load_contacts方法中未显示的全局变量集,因此当前您正在搜索一个不存在的2D数组。

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

4:您的search方法是int的返回类型,但在main中,您没有将返回值分配给任何要使用的变量,因此如果搜索成功,则不会发生任何事情。

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