Чрезвычайно запутался, как я могу объединить количество и слова в одной строке при выводе? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь создать программу, которая будет принимать список от пользователя с количеством и словами. Тем не менее, я все сделал, но не могу объединить числа с соответствующими словами в одной строке. Он продолжает выводить все числа, а затем выводить все слова. Также слова должны быть выведены в алфавитном порядке. Заранее спасибо!

{

set<string> sortedItems;
cout <<  " (type \"exit\" to exit, now press enter to begin listing): ";

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 take #'s


if (itemChoice == "exit")
{
    break;
}
sortedItems.insert(qtyChoice);
sortedItems.insert (itemChoice);

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

}

Вместо того, чтобы выводить номер каждого и имя каждого в одной строке, он делает это:

1. 23 hello
2. 18 thanks
3. 37 goodbye
4. exit
exit
18
23
37
goodbye
hello
thanks

1 Ответ

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

Вам нужно структурировать свои данные. В настоящее время вы относитесь к словам и количествам абсолютно одинаково, и поэтому они печатаются в одном списке с номерами перед словами, потому что цифры в алфавитном порядке идут перед словами.

Сначала создайте структуру для ваших данных

struct LineItem
{
    int quantity;
    string choice;
};

Теперь, в отличие от строк, компилятор не знает, как сортировать LineItems, вы должны сообщить ему, предоставив operator< для LineItems. Оператор <должен возвращать истину, если первый LineItem «меньше» второго LineItem. Я предполагаю (возможно, неправильно), что вы хотите печатать в алфавитном порядке вариантов. Так что это будет </p>

bool operator<(const LineItem& x, const LineItem& y)
{
    return x.choice < y.choice;
}

Затем объявите ваш набор как набор LineItems

set<LineItem> sortedItems;

Затем переписать ваш цикл ввода

for (int i = 1; ; i++)
{
    LineItem li;
    cout << i << ". ";
    cin >> li.quantity;
    cin >> li.choice;
    if (li.choice == "exit")
        break;
    sortedItems.insert(li);
}

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

Суть в том, что, создавая структуру LineItem, вы группируете связанных элементов данных (количество и выбор), чтобы затем вы могли распечатать их вместе.

...