C++ 我能';t使用我的删除功能从列表中删除项目

C++ 我能';t使用我的删除功能从列表中删除项目,c++,function,header-files,function-call,C++,Function,Header Files,Function Call,当我添加一个人时,它会被正确添加,但当我删除这个名字时,它会说找不到这个名字。此程序允许用户创建电话簿并编辑电话簿中的信息 #include <iostream> #include <string> #include "PhoneBook.h" using namespace std; char MenuSelection (); int main() { char Selection; PhoneBook myList; do{

当我添加一个人时,它会被正确添加,但当我删除这个名字时,它会说找不到这个名字。此程序允许用户创建电话簿并编辑电话簿中的信息

#include <iostream>
#include <string>
#include "PhoneBook.h"
using namespace std;
char MenuSelection ();

int main() {
    char Selection;
    PhoneBook myList;
    do{ 
        Selection = MenuSelection ();
        switch (Selection){
            case 'a':
                myList.AddEntry ();
                break;
            case 'd':
                myList.DisplayNamesAndNumbers( );
                break;
            case 's': 
                myList.FindEntry ();
                break;
            case 'r':
                myList.DeleteFunction ();
                break;
            case 'q': 

                break;
            default : 
                cout << "\n\nNot a command choice\n";
                cout << "Press enter to continue";
                cin.get();
                cin.get();
                system ("clear");
        }
    }while (Selection != 'q');
    myList.MakeFile ();
    cout << "Press enter to continue";
    return 0;
}

//This function prints out the opening menu and allws users to enter a command.
char MenuSelection (){
    char Response;
    cout << "\n                 MENU\n";
    cout << "a - add a name and phone number\n";
    cout << "d - display names and phone number\n";
    cout << "r - remove a name and phone number\n";
    cout << "s - search for a name and return the phone number\n";
    cout << "q - quit program\n\n";
    cout << "Enter your choice: ";
    cin >> Response;
    return Response;
}
#包括
#包括
#包括“PhoneBook.h”
使用名称空间std;
char MenuSelection();
int main(){
字符选择;
电话簿列表;
做{
选择=菜单选择();
开关(选择){
案例“a”:
myList.AddEntry();
打破
案例“d”:
DisplayNamesAndNumbers();
打破
案例s:
myList.FindEntry();
打破
案例“r”:
myList.delete函数();
打破
案例‘q’:
打破
违约:

cout看起来您在找到匹配项后忘记了在删除中“中断”。

看起来您在找到匹配项后忘记了在删除中“中断”。

我认为您使用了
strcmp
错误。如果两个字符串都匹配,它将返回
0
,因此您需要
strcmp()==0
。查看可能的返回值。
接下来,由于您已经在使用
std::string
s,只需直接比较它们,它们支持:

if(Contact == ContactNumber[Counter].NameEntry)
此外,在找到要删除的条目后,您不会中断for循环


另一方面建议:您的电话簿可能包含重复的条目,因为您没有检查该人是否已经存在于您的
AddEntry
功能中。
最后,在经历了从一个字符串到另一个字符串的基本映射的所有痛苦之后,为了进一步使用这样的数据结构,请考虑使用<代码> STD::MAP
#包括
int main(){
地图电话簿;
电话簿[“Meyers”]=“03024233”;
string number=phonebook.find(“Meyers”);
}

我认为您使用了
strcmp
错误。如果两个字符串匹配,它将返回
0
,因此您需要
strcmp()==0
。查看可能的返回值。
接下来,由于您已经在使用
std::string
s,只需直接比较它们,它们支持:

if(Contact == ContactNumber[Counter].NameEntry)
此外,在找到要删除的条目后,您不会中断for循环


另一方面建议:您的电话簿可能包含重复的条目,因为您没有检查该人是否已经存在于您的
AddEntry
功能中。
最后,在经历了从一个字符串到另一个字符串的基本映射的所有痛苦之后,为了进一步使用这样的数据结构,请考虑使用<代码> STD::MAP
#包括
int main(){
地图电话簿;
电话簿[“Meyers”]=“03024233”;
string number=phonebook.find(“Meyers”);
}
在当前的实现中,我认为它不会从对象数组中删除条目。您有
GROUPSIZE
contact
对象(即一个对象数组)。数组的大小不能修改。如果需要从数组中删除元素,首先需要有一个
contact
类型的引用

contact *ContactNumber ;  // new it with GROUPSIZE number of objects in PhoneBook constructor.
如果需要删除位于
m
位置的元素,则需要使用复制交换规则进行
GROUPSIZE-m
转换。即,
m+1
position对象应位于
m
位置,
m+2
position对象应位于
m+1
位置,…。我认为,这是正确的实现方式。而且请记住在电话簿的析构函数中删除[]ContactNumber;
,以避免内存泄漏

要避免所有痛苦,请改用
std::vector

在当前的实现中,我认为它不会从对象数组中删除条目。您有
GROUPSIZE
contact
对象(即一个对象数组)。数组的大小不能修改。如果需要从数组中删除元素,首先需要有一个
contact
类型的引用

contact *ContactNumber ;  // new it with GROUPSIZE number of objects in PhoneBook constructor.
如果需要删除位于
m
位置的元素,则需要使用复制交换规则进行
GROUPSIZE-m
转换。即,
m+1
position对象应位于
m
位置,
m+2
position对象应位于
m+1
位置,…。我认为,这是正确的实现方式。而且请记住在电话簿的析构函数中删除[]ContactNumber;,以避免内存泄漏


为了避免所有的痛苦,请改用
std::vector

Whoah,太多的代码。启动时的格式太差。你能不能只找出让你困惑的部分?string PhoneBook::DeleteFunction(){char-Answer;string personname;int-Location;cout>personname;for(int i=0;iPersonName;for(int i=0;icontact *ContactNumber ; // new it with GROUPSIZE number of objects in PhoneBook constructor.