我在google和stackoverflow上搜索了很多,但我无法找到答案。我实际上正在读一本C ++书(C ++ Primer 5th Edition),他们要我做一个练习。
"编写一个程序,读取多个事务并计算每个ISBN发生的事务数量。 (控制台项目)
这是我的代码atm:
Sales_item currentItem, item;
if (cin >> currentItem)
{
int cnt = 1;
while (cin >> item)
{
if (currentItem.isbn() == item.isbn())
{
++cnt;
}
else
{
cout << currentItem.isbn() << " occurs " << cnt << " times " << endl;
cnt = 1;
currentItem = item;
}
}
cout << item.isbn() << " occurs " << cnt << " times " << endl;
}
我不会解释交易是如何工作的,所以我会以另一种方式提出这个问题。
我输入我的控制台6(或更多)随机字符串作为示例:
101A
102A
101A
101A
103A
102A
我希望结果(输出)为:
101A occurs 3 times.
102A occurs 2 times.
103A occurs 1 times.
你会怎么做?
答案 0 :(得分:0)
这样的问题有多种方法,所以最好的方法取决于你的约束。我的方法是:
while(GetInputString(str)) {
myStruct* ptr = existingList.Find(str);
if (!ptr) {
existingList.Add(str);
} else {
ptr->IncrementCount();
}
}
我已经尝试过不为你解决问题 - 希望答案能为你提供一个模板......
答案 1 :(得分:0)
使用std :: map而不是list会更容易。
int main()
{
map<string,int> stringMap;
for (int i=0;i<3;i++)
{
cout<<"Enter string: ";
string s;
cin>>s;
if(stringMap.find(s)!=stringMap.end())
{
stringMap[s]++;
}
else
{
stringMap[s]=1;
}
}
for (map<string,int>::const_iterator itr = stringMap.cbegin(); itr!=stringMap.cend(); ++itr)
{
if(itr->second > 1)
cout<<itr->first << " occurs "<<itr->second<<" times"<<endl;
else
cout<<itr->first << " occurs "<<itr->second<<" time"<<endl;
}
return 0;
}
答案 2 :(得分:0)
#include <iostream>
#include <vector>
#include "Sales_item.h"
using namespace std;
void book_transactions(string isbn, int count);
int main()
{
vector<Sales_item> book_vec;
Sales_item book;
int total_transactions = 1;
// Reads in Sales_item objects
while (cin >> book)
{
book_vec.push_back(book);
}
// Compares ISBNs in vector, if two isbns are equal total transactions increases
for (int i = 0; i < book_vec.size() - 1; i++)
{
if (book_vec[i].isbn() == book_vec[i+1].isbn())
{
total_transactions = book_vec[i].get_units_sold() + book_vec[i+1].get_units_sold();
book_transactions(book_vec[i].isbn(), total_transactions);
}
}
}
void book_transactions(string isbn, int count)
{
cout << "ISBN: " << isbn << " " << "Transactions: " << count << endl;
}