Как я могу использовать параллельные массивы, чтобы составить список с количествами и словами, используя C ++ - PullRequest
0 голосов
/ 17 января 2019

Я застрял при попытке добавить количества в этот список, когда он возвращает результат. По сути, это список, введенный пользователем, который начинается с количества и сопровождается словом. Затем предполагается выводить тот же список, но в алфавитном порядке. В настоящее время у меня это в алфавитном порядке, но числа, которые пользователь вводит в той же строке, возвращаются в отдельной строке от слова при возврате в алфавитном порядке. Я знаю, что мне предлагается использовать параллельные массивы, но я понятия не имею, как включить их в это. Никто не смог мне ответить, но я знаю, что это выполнимо. Спасибо всем заранее !!

#include <iostream>
#include <string>
#include <iomanip>
#include "functions.h"
#include <algorithm>
#include <set>
using namespace std;


void print(const string& item)
{
    cout << item << endl;
}


int main(void)
{
    const int MAX_LENGTH = 256;
    string items [MAX_LENGTH];
    int quantities [ MAX_LENGTH];
    string itemChoice;
    string qtyChoice;
    int numItems= 0;

    int randomArray[MAX_SIZE];  

    {
        set<string> sortedItems;

        cout <<  " (type \"exit\" twice to exit, now press enter twice to begin listing your shopping list.): ";

        getline (cin, qtyChoice);
        getline(cin, itemChoice);

        for (int i = 1; ; i++)
        {
            string itemChoice;
            string wholeOrder;
            cout << i << ". ";
            cin >> itemChoice;
            cin >> qtyChoice; // this is how I got it to intake #'s
            //getline (cin, qtyChoice);// putting these here actually allow both items to be on one line!! but it leaves awkward spaces.
            //getline(cin, itemChoice);
            //getline (cin, qtyChoice);

            if (itemChoice == "exit")
            {
                break;
            }

            sortedItems.insert(qtyChoice);
            sortedItems.insert (itemChoice);
            //sortedItems.insert(itemChoice);   
        }


        for_each(sortedItems.begin(), sortedItems.end(), &print);


        return 0;
    }

это мой код и это то, что происходит как вывод

(type "exit"to exit, now press enter twice to begin listing your list.):

1. 3828 eijsd
2. 38238 shd
3. 382 hsdid
4. exit
382
38238
3828
eijsd
hsdid
shd

1 Ответ

0 голосов
/ 18 января 2019

Вы не проводите различий между количествами и словами в вашем наборе, поэтому они рассматриваются как одно и то же, без связи между ними. Чтобы сохранить соединение, вам нужна более сложная структура данных.

Возможно использование параллельных массивов, но накладные расходы - это боль. Более простым подходом, чем пара массивов, был бы массив пар - еще лучше - set пар, поскольку вы уже знаете, что наборы обеспечивают простую сортировку. (A map также будет работать.)

set< pair<string,string> > sortedItems;

Хранение как слова, так и количества в паре сохраняет связь между ними. Я оставлю это вам, чтобы заполнить остальные детали.

...