首页 > 解决方案 > C ++中文本文件中的重复单词

问题描述

该程序查找单词并删除所有在文本文件中重复的单词。在这里,我通过输入一个特定的单词编写了这段代码,但我希望程序自己找到单词的种类,结果只显示不重复的单词。我已经尽力而为,但失败了。你能建议我找到更好的方法吗?

int main()
{
   ifstream fin("name.txt");
   ofstream fout("result.txt");
   string word;
   string line;

   int pos;
   int ccount=0;;

   cout<<"Please input word:";
   cin>>word;

   while(getline(fin,line))
   {
       pos= 0;
       while(line.find(word,pos)!=string::npos)
       {
               pos = line.find(word,pos);
               line.erase(pos,word.length());
       }

        fout<<line<<endl;
   }
    fin.close();
    fout.close();
}

标签: c++

解决方案


您可以std::vector在阅读时使用 a 来跟踪单词,并使用 astd::set确保只将其添加到std::vector. 您想要的原因std::vector是因为std::set不会将std::strings 保持在插入顺序中。这应该做的工作:

#include <algorithm>
#include <fstream>
#include <unordered_set>
#include <sstream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> words;
    std::unordered_set<std::string> uniqueWords;

    std::ifstream fin("in.txt");
    if (fin.is_open())
    {
        std::string line;
        while (getline(fin, line))
        {
            std::istringstream iss(line);
            for (std::string word; iss >> word;)
            {
                std::string lowercaseWord = word;
                std::transform(word.begin(), word.end(), lowercaseWord.begin(), ::tolower);
                if (uniqueWords.find(lowercaseWord) == uniqueWords.end())
                {
                    uniqueWords.insert(lowercaseWord);
                    words.push_back(word);
                }
            }
        }

        fin.close();
    }

    std::ofstream fout("out.txt");
    if (fout.is_open())
    {
        for each (std::string word in words)
        {
            fout << word << " ";
        }

        fout.close();
    }

    return 0;
}

推荐阅读