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;icontact *ContactNumber ; // new it with GROUPSIZE number of objects in PhoneBook constructor.