2011-11-15 9 views
2

から挿入する必要がある、私たちはここからテキストファイルを使用してスペイン語の翻訳に英語を作成するために割り当てを与えてきました:http://www.ilovelanguages.com/IDP/files/Spanish.txtトランスレータを作成しています。適切に私のCSクラスのテキストファイル

をこれまでのところ、私が持っていますダウン挿入、しかし、ときに私はプログラムを実行する - 言葉がアップ混在取得し、私はtxtファイルが回線ごとの複数の単語を持っているという事実は、それを

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

class transl 
     { private: 
      class word 
        { public: 
         string eng_word, 
           spa_word; 
         word * next, 
          * prev;  

         word(string engl_word, string span_word, word * next1 = NULL, word * prev1 = NULL) 
         { eng_word = engl_word; 
          spa_word = span_word; 
          next = next1; 
          prev = prev1; } 
        }; 

      word * head, 
       * tail; 

     public: 
      transl::transl() 
      { head = NULL; 
       tail = NULL; } 

      transl::~transl() 
      { word * wordPtr, * nextWord; 
        wordPtr = head; 

        if(head == NULL) 
         return; 

        while(wordPtr != NULL) 
          { nextWord = wordPtr->next; 
          delete wordPtr; 
          wordPtr = nextWord; } 
      } 

      void insert(string engl_word, string span_word) 
      { if(head == NULL) 
        head = new word(engl_word, span_word); 

        else 
        { word * wordPtr; 
         wordPtr = head; 

         while(wordPtr->next != NULL) 
         {  wordPtr->next->prev = wordPtr; 
           wordPtr = wordPtr->next; } 

         wordPtr->next = new word(engl_word, span_word); 
         cout << wordPtr->next->eng_word << " " << wordPtr->next->spa_word << endl; } 
      } 

      string search(string engl_word) 
      { return "Hello"; } 

      }; 

int main() 
    { ifstream inFile; inFile.open("dictionary.txt"); 
     string engl_word, span_word; 
     transl test; 

      if (!inFile) 
      { cout << "ERROR! CANNOT LOCATE DICTIONARY!" << endl; 
       system("pause"); 
       return 1; } 

      cout << "Loading Dictionary: "; 

       while(inFile >> engl_word >> span_word) 
       { test.insert(engl_word, span_word); } 

      cout << "Done!" << endl; 
      system("pause"); 
      system("CLS"); 

      cout << "Translate: "; 
      cin >> engl_word; 

      cout << "The translation of " << engl_word << " is " << test.search(engl_word) << '.' << endl; 

      system("pause"); 
     return 0; } 

それがどのように見えるかの例を台無しに何であることを賭けていますこれは:

peor wound 
la herida 
wounded herida 
Done! 
Press any key to continue . . . 

値を正しく挿入する手順を知っている人はいませんか?

答えて

2

wordPtr->next->prev = wordPtr;は不必要で混乱します。リストの最後を検索していますが、その過程で変更しています。

新しい単語のprevポインタを挿入するのを忘れてしまいます。

しかし、実際の問題は辞書を読むことです。 inFile >> engl_word >> span_wordを実行すると、2つの空白制限リストが読み込まれます。ただし、スペイン語のエントリは空白で制限されず、残りの行を占有します。 >>で英語を読むことができますが、スペイン語の表現を解析するにはgetline(cin, span_word)のようなものが必要です。

関連する問題