2

私の CS クラスでは、次のテキスト ファイルを使用して英語からスペイン語への翻訳者を作成する課題が与えられました: http://www.ilovelanguages.com/IDP/files/Spanish.txt

これまでのところ、挿入は完了していますが、プログラムを実行すると、単語が混ざり合って、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 . . .

値を適切に挿入する手順を知っている人はいますか

4

1 に答える 1

2

wordPtr->next->prev = wordPtr;余計で紛らわしいです。リストの最後を検索していますが、その過程で変更しています。

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

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

于 2011-11-15T18:51:29.553 に答える