我有一份功课。我必须创建一个哈希表并使用链接列表来解决colissions。哈希表工作得很好。部分正在读取文件并解析内容以获取指令。
文件内容:
Load("Via Lactea", "Galaxia")
Load("Galaxia", "Sistema Solar", "Sol")
Load("Via Lactea", "Hoyo negro", "001")
Find("Via Lactea","Luna")
Delete("Via Lactea","Jupiter")
Show()
我的问题是什么是创建C / C ++程序以读取文件内容并解析操作程序的指令的最佳(也是最简单)方法。我是C / C ++的新手,所以我不确定解决这个问题的最佳方法是什么。
我如何阅读一行并知道什么样的指令?
我想知道一些想法
(我的哈希表代码在这里http://pastebin.com/yVEeqvzG)
答案 0 :(得分:1)
由于你的作业的主要目标是哈希表部分,你可能想要制作一个快速而肮脏的黑客来解析你的文件,这样你就可以快速地从主要部分开始。
以下是用C编写的,虽然它也会在C ++中推卸。
char line[100], command[100], word1[100], word2[100], word3[100];
FILE* f = fopen("whatever", "rt");
while (fgets(line, sizeof(line), f)) // read one line of text from file
{
// The following is a format string for scanf.
// It matches an opening quote, some text, and a closing quote.
#define WORD "\"%[^\"]\""
// Try to parse the line of text, applying all possible patterns.
if (sscanf(line, "Load("WORD", "WORD", "WORD")\n", word1, word2, word3) == 3)
{
...
}
else if (sscanf(line, "Load("WORD", "WORD")\n", word1, word2) == 2)
{
...
}
else if (sscanf(line, "Find("WORD", "WORD")\n", word1, word2) == 2)
{
...
}
else if (strcmp(line, "Show()\n") == 0)
{
...
}
}
强制性说明:sscanf
has security holes的这种用法虽然您可能不关心它。
答案 1 :(得分:0)
这个基本代码段能够逐行加载文件。如何管理解析是你的职责,我会选择strtok_s
,但你必须关心修剪空间,检查正确数量的参数,从字符串中提取双引号等等。
#include <iostream>
#include <fstream>
using namespace std;
int main () {
filebuf fb;
fb.open("data.txt",ios::in);
istream is(&fb);
char buffer[256];
while ((is.rdstate() & ifstream::eofbit) == 0) {
is.getline(buffer,256);
// handle your parsing here
}
fb.close();
return 0;
}