gpt4 book ai didi

c++ - c++中文本文件中的重复单词

转载 作者:行者123 更新时间:2023-11-28 04:38:38 24 4
gpt4 key购买 nike

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

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();
}

最佳答案

您可以使用 std::vector 来跟踪您阅读的单词,并使用 std::set 来确保您只将它添加到std::vector。你想要 std::vector 的原因是因为 std::set 不会保持 std::string 的顺序插入。这应该可以完成工作:

#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;
}

关于c++ - c++中文本文件中的重复单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50732111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com