我怎么能让这个多维数组工作?

时间:2017-10-19 09:33:51

标签: c++ arrays multidimensional-array element

    string shopInventory[4][2] = {
    {"Boots", "70"},
    {"Sword", "150"},
    {"Armor", "250"},
    {"Shield", "450"}
};
for (int i = 0; i < 4; i++) {
    for(int j = 0; j < 2; j++) {
        cout << "Multidimensional Array: " << shopInventory[i][NULL] << ": " << shopInventory[NULL][j] << endl;
    }
}

我试图建立一个基本的商店系统,但我目前仍然坚持如何输出数据并将细节分开。

预期输出:

靴子:70 剑:150 护甲:250 盾牌:450

实际输出:

多维数组:靴子:靴子 多维数组:靴子:70 多维数组:剑:靴子 多维数组:剑:70 多维数组:护甲:靴子 多维数组:护甲:70 多维数组:盾牌:靴子 多维数组:盾牌:70

还有一种方法可以根据用户想要购买的内容从阵列中删除元素吗?

2 个答案:

答案 0 :(得分:1)

你过度复杂了。你的循环应如下所示:

for (int i = 0; i < 4; i++) {
    std::cout << "Multidimensional Array: " << shopInventory[i][0] << ": " << shopInventory[i][1] << std::endl;
}

并且不要那样使用NULL - 如果你想在某个地方放置零,请使用0

答案 1 :(得分:-1)

您可以输出数组,例如以下方式

std::cout << "Multidimensional Array:" << std::endl;
for ( size_t i = 0; i < sizeof( shopInventory ) / sizeof( *shopInventory ); i++ ) 
{
    std::cout << shopInventory[i][0] << ": " << shopInventory[i][1] << std::endl;
}

或者您可以通过以下方式执行此操作

std::cout << "Multidimensional Array:" << std::endl;
for ( const auto &item : shopInventory ) 
{
    std::cout << item[0] << ": " << item[1] << std::endl;
}

考虑到你可以声明一个std::pair<std::string, std::string>类型的一维对象数组,而不是二维数组。例如

std::pair<std::string, std::string> shopInventory[] =
{
    { "Boots", "70" },
    { "Sword", "150" },
    { "Armor", "250" },
    { "Shield", "450" }
};

std::cout << "Multidimensional Array:" << std::endl;
for ( size_t i = 0; i < sizeof( shopInventory ) / sizeof( *shopInventory ); i++ )
{
    std::cout << shopInventory[i].first << ": " << shopInventory[i].second << std::endl;
}

std::pair<std::string, std::string> shopInventory[] =
{
    { "Boots", "70" },
    { "Sword", "150" },
    { "Armor", "250" },
    { "Shield", "450" }
};

std::cout << "Multidimensional Array:" << std::endl;
for (const auto &item : shopInventory)
{
    std::cout << item.first << ": " << item.second << std::endl;
}

要使用标准类std::pair,您必须包含标题<utility>

对于您的任务,如果您要从序列中删除元素,最好至少使用以下容器而不是数组

std::vector<std::array<std::string, 2>>

这是一个示范程序

#include <iostream>
#include <vector>
#include <string>
#include <array>

int main()
{
    std::vector<std::array<std::string, 2>> shopInventory =
    {
        { "Boots", "70" },
        { "Sword", "150" },
        { "Armor", "250" },
        { "Shield", "450" }

    };

    for (const auto &item : shopInventory)
    {
        std::cout << item[0] << ": " << item[1] << std::endl;
    }

    return 0;
}

它的输出是

Boots: 70
Sword: 150
Armor: 250
Shield: 450

根据您要对集合执行的操作,请考虑使用关联容器,例如std::map