03 Ribena 7 2.20
17咖啡76 1.50
24茶21 1.10
39 Sprite 3 1.70
56 pla 18 1.7068 Orange 106 2.20
77 Lime 11 2.10
86葡萄34 2.30
55巧克力15 2.70
16 Frosty 20 2.20
65 Lemonade 21 1.90
55 Yoghurt 99 3.40
05 Punch 3 1.70
这些记录需要根据第一列上的ITEM NUMBER进行排序。
void record_initialize()
{
vector<string> record;
cout << "\n";
record.push_back("03""\t\t""Ribena""\t\t""7""\t\t""2.20");
record.push_back("17" "\t\t""Coffee" "\t\t""76" "\t\t""1.50");
record.push_back("24" "\t\t""Tea" "\t\t""21" "\t\t""1.10");
record.push_back("39" "\t\t""Sprite" "\t\t""3" "\t\t""1.70");
record.push_back("56" "\t\t""Cola" "\t\t""18" "\t\t""1.70");
record.push_back("68" "\t\t""Orange" "\t\t""106""\t\t""2.20");
record.push_back("77" "\t\t""Lime" "\t\t""11" "\t\t""2.10");
record.push_back("86" "\t\t""Grape" "\t\t""34" "\t\t""2.30");
record.push_back("55" "\t\t" "Chocolate" "\t""15" "\t\t""2.70");
record.push_back("16" "\t\t""Frosty" "\t\t""20" "\t\t""2.20");
record.push_back("55" "\t\t" "Lemonade" "\t""21" "\t\t""1.90");
record.push_back("55" "\t\t""Yoghurt" "\t\t""99" "\t\t""3.40");
record.push_back("05" "\t\t""Punch" "\t\t""3" "\t\t""1.70");
cout << "\n";
//sort(record.begin(), record.end());
ofstream output_file("Drinks.txt");
ostream_iterator<string> output_iterator(output_file, "\n");
copy(record.begin(), record.end(), output_iterator);
}
void record_add()
{
DrinkRecord d;
cout << "\n";
cout << "Please enter the item no.: ";
cin >> d.no;
cout << "\n";
cout << "Please enter name of drink: ";
cin >> d.name;
cout << "\n";
cout << "Please enter the quantity: ";
cin >> d.quantity;
cout << "\n";
cout << "Please enter the unit price: ";
cin >> d.price;
cout << "\n";
ofstream myfile;
myfile.open("Drinks.txt", ios::app | ios::out);
cout << "\n";
myfile << d.no << "\t\t" << d.name << "\t\t" << d.quantity << "\t\t" << d.price << endl;
myfile.close();
}
void record_view()
{
cout << "\n";
cout << "ItemNo" << "\t\t" << "ItemName" << "\t" << "Quantity" << "\t" << "Unit Price" << endl;
cout << "\n";
string getcontent;
ifstream openfile("Drinks.txt");
if (openfile.is_open())
{
while (!openfile.eof())
{
getline(openfile, getcontent);
cout << getcontent << endl;
}
}
}
我已成功完成这一部分。但是,在向饮料库存添加新商品后,我现在遇到问题。我的讲师告诉我将txt文件读入矢量,然后对矢量进行排序,然后显示结果。我似乎无法采取正确的步骤。任何帮助将非常感激。 我试过这样的事情。
void read_File() //Read the file into the vector function definition
{
vector<string> logs;
string line;
cout << "Testing loading of file." << endl;
ifstream myfile("Drinks.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
getline(myfile, line);
logs.push_back(line);
sort(line.begin(), line.end());
}
myfile.close();
}
else{
cout << "Unable to open file." << endl;
}
}
答案 0 :(得分:0)
在阅读每一行后,您似乎正在排序。请注意,对sort
的调用是在循环内部。这意味着在每次迭代时(在您阅读的每一行之后),您都会调用sort
。如果我正确理解了您的作业,则需要对文件中的所有行(logs
)进行排序。如果是这样,那么这意味着您只需要拨打sort
一次。而不是将该行作为参数传递,您可能需要将logs
向量作为参数传递给它,因为您要对日志进行排序。
答案 1 :(得分:0)
阅读整个文件后,您必须对其进行一次排序。
另外,sort(line.begin(),line.end());将根据字符串比较规则对向量中的字符串进行排序,但是,您需要根据第一列进行排序。
你需要编写自己的自定义比较器,它从两个被比较的字符串读取第一列。
由于这看起来像一个类问题,我将让你编写下面的比较器函数。
请参阅以下链接以获取更多帮助。
sort(line.begin(), line.end(), mycolumncomparator);
// Fill the below function correctly
bool mycolumncomparator(const std::string& i, const std:string& j)
{
// Read the first column from both strings
// covert them into int using atoi
// return (int1 < int2);
}