3

假设我得到用户输入。如果他们输入的内容尚未在数组中(如何检查数组?),请将其添加到数组中。反之亦然,如何在给定用户输入的情况下从数组中删除某些内容。

例子:

string teams[] = {"St. Louis,","Dallas","Chicago,","Atlanta,"};

cout <<"What is the name of the city you want to add?" << endl;
    cin >> add_city;

 cout <<"What is the name of the city you want to remove?" << endl;
    cin >> remove_city;
4

3 回答 3

4

内置数组的大小是不可变的:您既不能删除元素,也不能添加任何元素。我建议使用 a std::vector<std::string>,而不是:向罐中添加元素std::vector<T>,例如,使用push_back(). 要删除一个元素,您将定位一个元素,例如,使用std::find(),然后使用erase()删除它。

如果您需要使用内置数组(尽管我看不出有什么好的理由),您可以使用在堆上分配一个数组new std::string[size]并保持其大小,在适当的时候使用delete[] array;.

于 2012-10-21T23:12:54.083 回答
0

要将信息添加到数组中,您可以执行以下操作:

for (int i = 0; i < 10; i++)
{
    std::cout << "Please enter the city's name: " << std::endl;
    std::getline(cin, myArray[i]);
}

我不确定从数组中删除某些内容是什么意思。您想将元素的值设置为 0,这将导致类似 {"City 1", "City 2", 0, "City 3}。或者您想从数组中删除它并移动其他元素填充它的空间,这将导致类似{“City 1”,“City 2”,“City 3”}?

于 2012-10-21T23:12:14.187 回答
0

使用数组,您可以使用 char* 处理空数组单元,例如“EMPTY”。要查找您在数组中搜索的项目,并找到“替换”或添加它。

const char * Empty = "EMPTY";
cout << "Please enter a city you want to add:"
cin >> city;
for(int i = 0; i < Arr_Size; i++) //variable to represent size of array
{
    if(Arr[i] == Empty) //check for any empty cells you want to add
    {
       //replace cell
    }
    else if(i == Arr_Size-1) //if on last loop
       cout << "Could not find empty cell, sorry!";
}

至于删除一个单元格:

cout << "Please enter the name of the city you would like to remove: ";
cin >> CityRemove;

for(int i = 0; i < Arr_Size; i++)
{
    if(Arr[i] == CityRemove)
    {
        Arr[i] = Empty;             //previous constant to represent your "empty" cell
    }
    else if(i == Arr_Size - 1)    //on last loop, tell the user you could not find it.
    {
        cout << "Could not find the city to remove, sorry!";
    }
}

在跳过“空”单元格时打印数组//打印数组

for(int i = 0; i < Arr_Size; i++)
{
    if(Arr[i] != Empty)             //if the cell isnt 'empty'
    {
        cout << Arr[i] << endl;
    }
}

但我确实同意使用矢量将是一种更有效的方法,这只是一种让你思考的创造性方法。

于 2012-10-21T23:29:40.967 回答