【问题标题】:Creating translator; Need to properly insert from a text file创建翻译器;需要从文本文件正确插入
【发布时间】:2011-12-29 18:33:30
【问题描述】:

在我的 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 . . .

有人知道正确插入值的过程

【问题讨论】:

    标签: c++ fstream text-files insertion


    【解决方案1】:

    wordPtr-&gt;next-&gt;prev = wordPtr; 是多余且令人困惑的。您正在搜索列表的末尾,但在此过程中对其进行了修改。

    你忘记在insert中写新词的prev指针了。

    然而,真正的问题在于阅读字典。当您执行inFile &gt;&gt; engl_word &gt;&gt; span_word 时,将读入两个限制空格的列表。但是,西班牙条目不受空格限制,而是占据了该行的其余部分。虽然您可以使用 &gt;&gt; 阅读英文单词,但您需要类似 getline( cin, span_word ) 的东西来解析西班牙语表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多