如何启用用户DELETE - 根据用户输入从数组中删除某人,对数组进行排序,并打印出新数组中的所有条目。 (格式:DELETE - LastName,FirstName)?
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
struct People
{
std::string lname;
std::string fname;
};
const int numNames = 2;
int main()
{
char name[numNames][80];
char last_name[numNames][80];
char name_buff[1][80];
cout << "INSERT name.\n";
cout << "\nEntires should be of the format\n";
cout << "Last_Name First_Name." << "\n\n";
for (int i = 0; i < numNames; ++i)//use a loop to get user input
cin >> (name[i]);
cout << "\n";
cout << "***Initialize check***" << "\n\n";
for (int i = 0; i < numNames; ++i)//this loop will show the the user the data that has been input
cout << (name[i]) << "\n";
cout << "\n***Check Complete***" << "\n\n";
cout << "Press ENTER to contine";
cin.get();
// This is the bubble sort.
for (int a = 1; a <= numNames; a++)
{
for (int b = numNames - 1; b >= a; b--)
{
if (name[b - 1][0] > name[b][0])
{ // if out of order error message
cout << "Please try again!";
}
}
}
return 0;
};
答案 0 :(得分:1)
不是一个答案,只是一些提示让你解开:
无法从数组中实际删除元素
相反,你要做的是跟踪有多少数组元素被考虑&#34;有效&#34;。
去除&#34;删除&#34;一个元素,你将所有元素向右移动一步,然后递减你的&#34;有效计数器&#34;。
(如果您不确定如何操作,请先在纸上进行处理。)
其他一些提示:
处理结构数组要比一堆数组容易得多。
使用您定义的结构。
我个人会重命名,所以它的目的更明确(不要将复数用于单数事物):
struct Person
{
std::string last_name;
std::string first_name;
};
然后使用包含这些内容的数组:
Person people[max_persons];
并使用此功能。
在实现排序和删除之前,请先写出输出位并确保它有效 - 这样可以帮助查找其他内容中的错误。
答案 1 :(得分:-1)
没关系,这里我们可以安全地使用矢量但是我们必须在两种情况下通过简单的删除使用 new 释放我们在堆中分配的内容:当我们删除一个时来自向量的元素,在退出程序之前,这样:
for(int i=0; i<tabPersons.size(); i++){
delete tabPersons[i];
}
现在,Aprile,如果你有两个同名的人怎么办?所以你必须通过在数组中请求它来删除一个人。如果使用Vector容器,则可以使用以下指令删除人员:
tabPersons.erase(tabPersons.begin()+num);
这样的事情:
答案 2 :(得分:-2)
最好使用这样的矢量:
vector<Person*> tabPersons;
然后输入:
cout<<setw(10)<< setfill(' ')<<" name: ";
cin>>name;
cout<<setw(10)<< setfill(' ')<<" surname: ";
cin>>surname;
Person * person;
person = new Person(name, surname);
tabPersons.push_back(person);
cout<<" __________________________________________"<<endl;