在输出时,我对如何将数量和单词组合在一行感到非常困惑
Extremely confused on how I can combine quantities and words in one line when outputting?
我正在尝试制作一个程序,该程序将从用户那里接收一个包含数量和单词的列表。然而,我已经完成了所有的工作,但无法将数字与同一行上的单词组合起来。它继续输出所有的数字,然后输出所有的单词。单词也应该按字母顺序输出。提前谢谢!
{
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结构,您可以对关联的数据项(数量和选项)进行分组,这样您就可以将它们打印在一起。
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 从C++dll访问C#中的一行主要参数
- OpenGL大的3D纹理(>2GB)非常慢
- 在C++中,我如何接受不同于同一行的用户输入
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 如何从一行中读取特定数量的字符?(C++)
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 读取最后一行代码算法 - c++ 时出现问题
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 有没有办法在一行中填充矢量图
- 需要将一行代码从C++ Qt翻译成PyQt
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- 使用浮点数和双精度数的非常小数字的数学
- 为什么如果我添加这一行,我的程序会不断询问值
- 如何使代码打印文本文件中的第一行?
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 如何在C++中以这种方式返回一行文本?
- 在输出时,我对如何将数量和单词组合在一行感到非常困惑