我被困在这个程序的位置,我要计算所有CarType的价格总和。 对于前者福特的价格总和 __ 。数据从名为input.dat的文件中提取。 我不能为我的生活弄清楚如何对某个Car类型的所有Element进行分组并将总和加起来然后将总和存储到数组carPriceSum中。我理解如何在数组中找到连续元素的总和。任何提示或示例都将非常感谢!
// carstats.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <conio.h> // I understand this is not best practice
#include <fstream>
using namespace std;
enum CarType
{
Ford,
Chevy,
Honda,
Toyota
};
struct CarCustomer
{
string firstName;
string lastName;
double price;
CarType carType;
};
void calcCarStats(CarCustomer arrCustomers[], int count, int carCount[], double carPriceSum[])
{
for(int index = 0; index < count; index++)
{
carCount[arrCustomers[index].carType]++;
carPriceSum[index] = arrCustomers[index].price;
// This is where I'm stuck
}
}
void displayCarTypeCounts(int carCount[], double carPriceSum[])
{
for(int index = Ford; index <= Toyota; index++)
{
cout << carCount[index] << " " << carPriceSum[index] << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int count = 0;
CarCustomer arrCustomers[100]; //Array of structs for the Struct CarCustomer
CarCustomer carCustomer;
int carCount[100] = {0};
double carPriceSum[100] = {0.0};
double carPriceAvg[100] = {0.0};
ifstream fin;
CarType carType; //CarType enum
fin.open("input.dat");
if(!fin)
{
cout << "Error opening file, check the file name" << endl;
_getch();
return -1;
}
while (!fin.eof())
{
int carTypeInt;
fin >> arrCustomers[count].firstName;
fin >> arrCustomers[count].lastName;
fin >> arrCustomers[count].price;
fin >> carTypeInt;
arrCustomers[count].carType = (CarType)carTypeInt;
count++;
}
fin.close();
calcCarStats(arrCustomers, count, carCount, carPriceSum);
displayCarTypeCounts(carCount, carPriceSum);
_getch();
return 0;
}
//input.dat
Joe Smith 5999.99 0
Mary Doe 23999.99 1
Joe Green 1999.99 1
Jim Smith 4999.99 2
Jane Green 3999.99 0
Mark Doe 9999.99 1
John Peters 7999.99 2
Jim Green 8999.99 3
Mindy Doe 3999.99 2
Janet Green 6999.99 1
Mork Doe 2999.99 3
Jane Smith 3999.99 3
John Roberts 15999.99 1
Mandy Doe 12999.99 0
Janet Smith 6999.99 0
Macy Doe 14999.99 1
答案 0 :(得分:2)
我想你只想添加到carPriceSum[n]
中的“正在运行”的总和:
从
更改calcCarStats
carCount[arrCustomers[index].carType]++;
carPriceSum[index] = arrCustomers[index].price;
// This is where I'm stuck
到
CarType type = arrCustomers[index].carType;
carCount[type]++;
carPriceSum[type] += arrCustomers[index].price;
无关评论:
考虑更改读取'eof()'循环:
CarCustomer current;
int carTypeInt;
while (fin >> current.firstName >> current.lastName >> current.price >> carTypeInt)
{
current.carType = (CarType)carTypeInt;
arrCustomers[count] = current;
count++;
}
考虑在display
函数中打印实际的购物车类型:
ostream& operator<<(ostream& os, CarType ct)
{
switch(ct)
{
case Ford: return os << "Ford";
case Chevy: return os << "Chevy";
case Honda: return os << "Honda";
case Toyota: return os << "Toyota";
}
return os << "Unknown";
}
void displayCarTypeCounts(int carCount[], double carPriceSum[])
{
for(int index = Ford; index <= Toyota; index++)
{
cout << (CarType)index << " " << carCount[index] << " " << carPriceSum[index] << endl;
}
}
考虑使用标准库容器(地图,矢量):查看演示 Live on Coliru
// carstats.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <map>
#include <fstream>
using namespace std;
enum CarType
{
Ford,
Chevy,
Honda,
Toyota
};
struct Stats
{
unsigned units_sold;
double total_turnover;
Stats() : units_sold(0), total_turnover(0.0) {}
};
typedef map<CarType, Stats> Statistics;
ostream& operator<<(ostream& os, CarType ct) {
switch(ct) {
case Ford: return os << "Ford";
case Chevy: return os << "Chevy";
case Honda: return os << "Honda";
case Toyota: return os << "Toyota";
}
return os << "Unknown";
}
struct CarCustomer
{
string firstName;
string lastName;
double price;
CarType carType;
};
Statistics calcCarStats(vector<CarCustomer> const& arrCustomers)
{
Statistics stats;
for (auto& customer : arrCustomers)
{
auto& entry = stats[customer.carType];
entry.units_sold += 1;
entry.total_turnover += customer.price;
}
return stats;
}
void displayCarTypeCounts(Statistics const& stats)
{
for (auto& entry: stats)
cout << (CarType)entry.first << " " << entry.second.units_sold << " " << entry.second.total_turnover << endl;
}
int main()
{
vector<CarCustomer> arrCustomers;
ifstream fin("input.dat");
if(!fin)
{
cout << "Error opening file, check the file name" << endl;
return -1;
}
CarCustomer current;
int carTypeInt;
while (fin >> current.firstName >> current.lastName >> current.price >> carTypeInt)
{
current.carType = (CarType)carTypeInt;
arrCustomers.push_back(current);
}
fin.close();
auto stats = calcCarStats(arrCustomers);
displayCarTypeCounts(stats);
}
答案 1 :(得分:0)
最简单的事情(但不是最有效)是循环通过arrCustomers寻找特定的汽车类型并积累你的总和。如果您将该代码放在一个函数中,那么您可以为每种汽车类型调用它。