c++ - 如果字符串尚未打印,则打印字符串
问题描述
我对 CS 和编程比较陌生,我正在尝试创建一个程序来分析事务文本文件并显示它们的一些统计信息。目前我正在将所有事务保存到一个向量中,并使用嵌套的 for 循环来找出该成员在向量中出现的次数。我现在正在尝试打印它出现的数量,但前提是该数量之前尚未在循环中打印。存储交易文件的向量名称为_Items,交易文件写法如下:
1:1:water:0:Fri Apr 30 23:47:14 2021
1:1:water:0:Fri Apr 30 23:47:14 2021
1:7:onionsoup:6:Fri Apr 30 23:47:14 2021
1:7:onionsoup:6:Fri Apr 30 23:47:14 2021
1:7:onionsoup:6:Fri Apr 30 23:47:14 2021
类函数的代码如下:
void Transactions::itemSales() {
int Quantity;
string displayMessage;
vector<string> _Check;
cout << "--------------------------------" << endl;
for(int i = 0; i <_Items.size(); i++){
Quantity = 0;
for(int j = 0; j < _Items.size(); j++) {
if(_Items[i]._itemNo == _Items[j]._itemNo) {
Quantity++;
}
}
displayMessage =
std::to_string(_Items[i]._itemNo) + '-' +
_Items[i]._itemDescription + "'s Quantity sold: " +
std::to_string(Quantity);
_Check.push_back(displayMessage);
for(int k = 0; k < _Check.size(); k++) {
if(displayMessage.compare(_Check[k]) != 0) {
cout << displayMessage << endl;
}
}
}
}
我希望代码能够显示 1 个项目编号的显示消息,然后移动到数组中下一个出现的任何项目编号。
解决方案
您需要按 itemNo 对 _Items 进行排序。您可以使用任何排序算法,但为了便于理解,我正在为您实现冒泡排序。
void sort(_Items arr[], int n)
{
int i, j;
for (i = 0; i < n-1; i++)
// Last i elements are already in place
for (j = 0; j < n-i-1; j++)
if (arr[j]._itemNo > arr[j+1]._itemNo)
swap(&arr[j], &arr[j+1]);
}
void swap(_Items *small, _Items *big)
{
_Items temp = *small;
*small = *big;
*big = temp;
}
在此之后将排序的_Items 列表传递给您的项目销售方法
推荐阅读
- javascript - Testcafe - 页面对象结构和默认类
- xamarin - 签名板 Xamarin.Forms 将签名另存为文件
- javascript - 如何使用 require.js 加载 Vue.js 和我的自定义 Vue 库
- xcode - 如何快速修复 Xcode 的打开问题?
- azure - Azure 托管数据磁盘未加密
- java - Set 的映射需要 Id?
- sql - 按 SQL Server 中每个结果集的记录数分组
- r - 通过“for”循环调用列
- java - 通过 bolt 暴露嵌入式 Neo4J OGM 数据库
- interrupt - 在 STM32F4XX 上写入非易失性存储器而不中断 UART 中断执行