首页 > 解决方案 > 如果字符串尚未打印,则打印字符串

问题描述

我对 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 个项目编号的显示消息,然后移动到数组中下一个出现的任何项目编号。

标签: c++

解决方案


您需要按 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 列表传递给您的项目销售方法


推荐阅读