我正在使用文本文件制作一个简单的电话簿,因为我是初学者并且这是家庭作业。我有正确的查看联系人和添加功能。我唯一的问题是我无法弄清楚如何使用输入删除联系人。我正在使用 vector 。我有一个类来声明我的变量和函数。这是我目前所拥有的:
我删除了其他功能,因为我只专注于删除联系人并减少混淆
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
class phonebook
{
public:
void deletecontact();
private://declaring the variables
vector<string> name;//Graves the contact and phone number
string NAME;
string delete_contact;//input to delete contact
bool flag = 0;
};
void phonebook::deletecontact()
{
ifstream fin;
ofstream fout;
fin.open("phonebook.txt");
fout.open("phonebook.txt", ofstream::out | ofstream::app);
if (fout.fail())
{
cout << "Error";
exit(1);
}
if (fin.fail())
{
cout << "Error";
exit(1);
}
while (getline(fin, NAME)){
name.push_back(NAME);
}
cout << "Type in who you want to delete" << endl;
cin >> delete_contact;
for (unsigned int i = 0; i < name.size(); i++)
if (delete_contact==name[i])
{
system("cls");
flag =1;
}
if(flag)
{
for(unsigned int i=0; i<name.size(); i++)
if(name[i].erase(delete_contact))
{
cout << "Deleted successfully!" << endl;
fout << name[i];
}
}
fin.close();
fout.close();
system("PAUSE");
}
这是我的错误:
在成员函数'void phonebook::deletecontact()'中:| 错误:没有匹配函数来调用'std::basic_string::erase(std::string&)'|
批评也爽
最佳答案
错误的原因是您尝试使用 std::string
参数调用 string::erase()
。 std::string
类中没有这样的函数。 name[i]
是一个 std::string
,因此您试图在 std::string 上调用
。erase
您要做的是调用 vector::erase
,并为您要删除的项目提供迭代器。为此,您可以使用 vector::erase
和 std::remove
#include <algorithm>
//...
name.erase(std::remove(name.begin(), name.end(), delete_contact), name.end());
不需要flag
变量,没有循环等。remove
算法函数返回一个迭代器到与名称匹配的项目。然后只需删除从该迭代器开始的所有项目即可。
注意:
如果您只想删除找到的第一个项目(而不是所有与 delete_contact
匹配的项目),则将 std::remove
替换为 std::find
。
关于c++ - 删除联系人的简单电话簿程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783730/