2012-04-19 3 views
0

私は宿題があります。私はハッシュテーブルを作成し、リンクリストを使用してコリジョンを解決する必要があります。ハッシュテーブルはとてもうまく動作しています。位置の一部はファイルを読み込んで内容を解析して覚書を得ることです。テキストファイルから指示を得る

ファイルの内容:

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++を初めて使っているので、これを解決する最良の方法は何か分かりません。

1行を読み、どのような指示がわかるのですか?私はいくつかのアイデア

を知っていただきたいと思い

+3

どの言語ですか? CまたはC++? –

+0

クラスのものを除いて、それらの違いは何であるかわからない – chepe263

+0

確かにあなたはどちらか一方を使うつもりです。 –

答えて

0

この基本的なスニペットは、行毎にファイルをロードすることができます(私のハッシュテーブルのコードはここにhttp://pastebin.com/yVEeqvzGです)。構文解析をどのように管理するかはあなたの義務ですが、私は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; 
} 
+1

strtokはEVILです、触れないでください:) – ScarletAmaranth

+0

'strtok_s'を指定していないのを忘れてしまいました:P – Jack

+0

前回私は普通のstrtokを使用しました。 – ScarletAmaranth

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) 
    { 
     ... 
    } 
} 

必須注記:あなたはおそらくそれを気にしないもののsscanfhas security holesのこの用法。