gpt4 book ai didi

c++ - 编写 C++ 程序以从 Linux 命令行搜索索引文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:31 26 4
gpt4 key购买 nike

我编写了一个读取数据文件并根据原始文件中的数据创建排序索引文件的程序。但是,我应该编写第二个程序,允许用户从 Linux 命令行搜索该索引文件。例如,他们应该能够键入

search 12382 prog5.idx

进入命令行并显示该记录的信息。我不知道如何做到这一点。

我已经编写了创建索引文件的代码(有效):

#include <iostream>
#include <fstream>
#include <map>
#include <sstream>
#include <string>
#include <iomanip>

using namespace std;

class Record {
string name;
int code;
double cost;
public:
Record() {
}
Record(string tname,int tcode,double tcost) : name(tname),code(tcode),cost(tcost) {
}
friend ostream& operator<< (ostream &os, const Record& r);
};

//print function
ostream& operator<< (ostream &os, const Record& r) {
os << setw(10) << r.name << " " << setw(5) << r.code << " $" << setw(10) << setprecision(2) << fixed << r.cost ;
return os;
}

int main() {
std::map<int, Record> myMap;
ifstream data;
size_t offset_count = 0;
data.open("prog5.dat");
ofstream outFile("prog5.idx", ios::out);

//if file can't be opened, exit
if(!data) {
cerr << "Open Failure" << endl;
exit(1);
}

std::string line;
while (std::getline(data, line)) {
stringstream ss(line);
int key;
string name;
int code;
double cost;

if(ss >> key >> name >> code >> cost) {
Record r(name,code,cost);
myMap.insert( pair<int,Record>(key,r));
}
else {
cout << "Error";
}
}

// print what's stored in map
for(std::map<int,Record>::iterator x = myMap.begin(); x!=myMap.end(); ++x) {
cout << setw(10) << x->first << ": " << x->second << endl;
}
}

运行上述代码时得到如下输出:

     8:      blank     0 $      0.00
12165: Item16 30 $ 7.69
12345: Item06 45 $ 14.20
12382: Item09 62 $ 41.37
12434: Item04 21 $ 17.30
16541: Item12 21 $ 9.99
21212: Itme31 19 $ 8.35
34186: Item25 18 $ 17.75
41742: Item14 55 $ 12.36

这是我目前对第二个程序的了解:

#include <prog3.idx>
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char** argv) {
if(argc < 3) {
std::cerr << "Too few arguments \n";
std::exit(EXIT_FAILURE);
}

int key = atoi(argv[1]);
const char* filename = argv[2];
ifstream input;
input.open("prog5.idx");
}

但我不确定从那里去哪里。有人可以帮帮我吗?

最佳答案

使用 map 或 multimap 并在 STL 中查找。使用索引作为键从剩余数据中创建数据类型。程序必须先读入整个文件,然后找到搜索到的索引。

关于c++ - 编写 C++ 程序以从 Linux 命令行搜索索引文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26601085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com