在输出时,我对如何将数量和单词组合在一行感到非常困惑

Extremely confused on how I can combine quantities and words in one line when outputting?

本文关键字:一行 非常 组合 输出 单词      更新时间:2023-10-16

我正在尝试制作一个程序,该程序将从用户那里接收一个包含数量和单词的列表。然而,我已经完成了所有的工作,但无法将数字与同一行上的单词组合起来。它继续输出所有的数字,然后输出所有的单词。单词也应该按字母顺序输出。提前谢谢!

{
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

您需要构建数据。目前,你对单词和数量的处理完全相同,所以它们打印在一个列表中,数字在单词之前,因为按字母顺序,数字在词之前。

首先为您的数据创建一个结构

struct LineItem
{
int quantity;
string choice;
};

现在,与字符串不同的是,编译器不知道如何对LineItems进行排序,您必须通过为LineItems提供operator<来告诉它。运算符<如果第一个LineItem"小于"第二个LineItem,则应返回true。我假设(也许是错误的)你们想按选择的字母顺序打印。那就是

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结构,您可以关联的数据项(数量和选项)进行分组,这样您就可以将它们打印在一起。