1

所以,我的工作主要在这里完成,但我似乎无法弄清楚如何按照文本文件显示的顺序排列单词。它只是从文本文件中获取单词,并按字母顺序排列单词。文本文件位于此页面的底部。

文本文件分析

编写一个程序,读取两个文本文件的内容,并按以下方式进行比较:

• 它应该显示两个文件中包含的所有唯一词的列表。• 它应该显示出现在两个文件中的单词列表。• 它应该显示出现在第一个文件中的单词列表,而不是第二个文件。• 它应该显示出现在第二个文件中的单词列表,而不是第一个文件。• 它应该显示出现在第一个或第二个文件中的单词列表,但不能同时出现在这两个文件中。

提示:使用集合操作来执行这些分析。此外,有关字符串标记化的讨论,请参见第 10 章。

这是我到目前为止所拥有的:

#include <iostream>
#include <set>
#include <string>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;

void displaySet(set<string>);
void displayDifference(set<string>, set<string>);

int main()
{
    ifstream inputFile;
    string name;
    const int MIN_VALUE = 1;
    const int MAX_VALUE = 2;
    int numbers;
    unsigned seed = time(0);
    
    srand(seed);
    
    set<string> firstFileWords;
    set<string> secondFileWords;
    
    inputFile.open("firstTextFile.txt");
    cout << "Reading data from the first file.\n";
    
    cout << endl;
    
    while (inputFile >> name)
    {
        firstFileWords.insert(name);
    }
    
    displaySet(firstFileWords);
    
    inputFile.close();
    
    inputFile.open("secondTextFile.txt");
    
    cout << endl;
    
    cout << "Reading data from the second file.\n";
    
    while (inputFile >> name)
    {
        secondFileWords.insert(name);
    }
    
    cout << endl;
    
    displaySet(secondFileWords);
    
    cout << endl;
    
    cout << "The differences between the two files:\n";
    
    cout << endl;
    
    displayDifference(firstFileWords, secondFileWords);
    
    displayDifference(secondFileWords, firstFileWords);
    
    cout << endl;
    
    numbers = rand() % 2 + 1;
    
    if(numbers = 2)
    {
        displaySet(secondFileWords);
        cout << "\nThe Second File Words";
    }
    else
    {
        displaySet(firstFileWords);
        cout << "\nThe First File Words";
    }
    return 0;
}

void displaySet(set<string> s)
{
    for (auto element : s)
    {
        cout << element << " ";
        cout << endl;
    }
}

void displayDifference(set<string> set1, set<string> set2)
{
    vector<string> result(set1.size() + set2.size());
    
    auto iter = set_difference(set1.begin(), set1.end(),
                               set2.begin(), set2.end(),
                               result.begin());
                               
    result.resize(iter - result.begin());
    
    for (auto element : result)
    {
        cout << element << " ";
    }
}

这些是我提到的文本文件中的文字:

//firstTextFile.txt

它应该显示两个文件中包含的所有唯一单词的列表。它应该显示出现在两个文件中的单词列表。它应该显示出现在第一个文件中的单词列表,而不是第二个文件。它应该显示出现在第一个或第二个文件中的单词列表,但不能同时出现在这两个文件中。

//secondTextFile.txt

它应该显示两个文件中包含的所有唯一单词的列表。它应该显示出现在两个文件中的单词列表。它应该显示出现在第二个文件中的单词列表,但不是第一个文件。它应该显示出现在第一个或第二个文件中的单词列表,但不能同时出现在这两个文件中。

它们之间的区别是第三句话。

4

1 回答 1

0

不要读入一个集合,而是使用 astd::list进行双向迭代或std::forward_list前向迭代。文本文件中的单词按字母顺序显示,因为它会std::set自动对其数据进行排序。

于 2021-11-12T00:57:57.517 回答