2016-12-01 16 views
-6

ここまでは私がこれまで持っていたことです。問題は、現在、テキストファイル "word.txt"にある単語の文字列を読み込んで、それをトライツリーに挿入することです。私は、そのツリーの機能をテストするために、「空のinit()」関数を使用し、それはありませんが、テキストファイルを使用して、私はどのようにテキストファイルを読む

任意のアイデアください

#include <iostream> 
using namespace std; 
#include <fstream> 
#include <iomanip> 
#include <string> 



class TrieNode { 
public: 
    // Initialize your data structure here. 
    TrieNode() { 
     value = 0; 
     for (int i=0;i<26;i++){ 
      children[i] = NULL; 
     } 
    } 
    int value; 
    TrieNode* children[26]; 
}; 

class Trie { 

private: 
    TrieNode*root; 
    int count; 


public: 
    Trie() { 
     root = new TrieNode(); 
     count = 0; 
    } 

    // Inserts a word into the trie. 
    void insert(string s) { 
     TrieNode *p = root; 
     long int len = s.size(); 
     for (int i=0;i<len;i++){ 
      int index = s[i] - 'a'; 
      if (! p->children[index]){ 
       p->children[index] = new TrieNode(); 
      } 
      p = p->children[index]; 
     } 
     count++; 
     p->value = count; 
    } 

    // Returns if the word is in the trie. 
    // -1 if not in trie and not prefix of anything in trie 
    // 0 if not in trie but is a prefix of something in trie 
    // 1 if in trie 
    int search(string key) { 
     TrieNode *p = root; 
     long int lenght = key.size(); 
     for (int i=0;i<lenght;i++){ 
      int index = key[i] - 'a'; 
      if (p->children[index]){ 
       p = p->children[index]; 
      } 
      else{ 
       return -1; 
      } 
     } 
     if (p->value!=0){ 
      return 1; 
     } 
     else{ 
      return 0; 
     } 

    } 

}; 


//Game class using a tree 
class GhostGame{ 
private: 
    string row; 
    ifstream fin; 
    string wordSoFar = ""; 
    string Player1,Player2; 
    Trie Tree; 
public: 
    void ReadFile(){ 
     ifstream fin("word.txt"); 

     while (!fin.eof()) { // read file till the end 
      fin>>row; 
      getline(fin,row); 
      cout << row << endl; 
      Tree.insert(row); 
     } 
     //fin.close(); 
    } 
    void init(){ 
     Tree.insert("ab"); 
     Tree.insert("acd"); 
    } 


    //start menu 
    void StartGame(){ 
     init(); 
     cout<<"========================="<<endl; 
     cout<<"Welcome to Ghost Game"<<endl; 
     cout<<"========================="<<endl; 

     //ReadFile(); 
     while(Tree.search(wordSoFar)!=1){ 
      cout<< "Player 1 Insert a letter => "; 
      cin>> Player1; 
      cout<<setw(60)<<"now = ["<< wordSoFar <<"]"<<endl; 
      wordSoFar +=Player1; 
      if(Tree.search(wordSoFar)==1){ 
       cout<< "Player 2 Wins "<<endl; 
       break; 
      } 

      cout<< "Player 2 Insert a letter => "; 
      cin>>Player2; 
      cout<<setw(60)<<"now = ["<< wordSoFar<<"]"<<endl; 
      wordSoFar += Player2; 
      if(Tree.search(wordSoFar)==1){ 
       cout<< "Player 1 Wins "<<endl; 
       break; 
      } 

     } 
    }}; 



// main driver 
int main() 
{ 

    GhostGame G1; 
    G1.StartGame(); 


    return 0; 
} 
+0

を比較する前に、tolowerを使用してください...一時的な文字列にファイルを読み込みます.......これまでに何を試しましたか?あなたはどこで前に検索しましたか?このサイトは、あなたのための思考の仕事をするためのものではありません...... – itmuckel

+0

あなたはあなたの仕事をするように求めています。 あなたは「これは私のために」だけではなく、何を試みたかを言う必要があります – kemis

+0

この種の検索のために作られた名前が忘れられているタイプのツリーがあります。 – user4581301

答えて

-1
  • ファイルを開く
  • またはライン機能は
  • チェック最初の文字が

    void findString(char *filename, char ch) 
    { 
        char temp[100]; 
        FILE *infile = fopen(filename, "rw"); 
        while(infile != NULL) 
        { 
        fgets(temp,100,infile); 
    
        if(tolower(temp[0]) == ch) 
         cout << temp; 
        } 
        fclose(infile); 
    } 
    
1

定期的な使用を知らないどこのthatsそのようなタスクの式は、ヘッダファイル<regex>にあります。 regexに関するいくつかの良いチュートリアルは、例えばProfessional C++(Wrox)の書籍で見つけることができます。

ファイルの読み取りには、ifstreamクラスを<fstream>から使用してください。 fgetsを使って

関連する問題