Создание переводчика; Нужно правильно вставить из текстового файла - PullRequest
2 голосов
/ 15 ноября 2011

Для моего класса CS нам было дано задание создать переводчик с английского на испанский, используя текстовый файл отсюда: http://www.ilovelanguages.com/IDP/files/Spanish.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 . . .

Кто-нибудь знает процедуры для правильного ввода значений

1 Ответ

2 голосов
/ 15 ноября 2011

wordPtr->next->prev = wordPtr; лишнее и запутанное.Вы ищете конец списка, но в процессе вносите в него изменения.

Вы забыли написать указатель prev для нового слова во вставке.

Однако настоящая проблема заключается вчтение словаря.Когда вы выполняете inFile >> engl_word >> span_word, считываются два списка, ограниченных пробелами. Однако испанские записи не ограничены пробелами, а занимают остальную часть строки.Хотя вы можете читать английское слово с помощью >>, вам понадобится что-то вроде getline( cin, span_word ) для разбора испанского выражения.

...