Can you please rewrite replacing the vector> all_line_numbers; that was removed and remove a difference vector that will preform a parallel sort please. Thank you Rewrite the program without the unnecessary vector. 1) The program declares the following vectors, vector all_words; vector all_word_counts; vector> all_line_numbers; //do not remove this one One of the vectors is unnecessary. 2) Sort the 2 or 3 parallel vectors in ascending order of the words or the number of times the words appear in the file.

C++ for Engineers and Scientists
4th Edition
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Bronson, Gary J.
Chapter7: Arrays
Section7.6: The Standard Template Library (stl)
Problem 8E
icon
Related questions
Question

Can you please rewrite replacing the vector<vector<int>> all_line_numbers; that was removed and remove a difference vector that will preform a parallel sort please. Thank you

Rewrite the program without the unnecessary vector.

1) The program declares the following vectors,

vector<string> all_words;
vector<int> all_word_counts;
vector<vector<int>> all_line_numbers; //do not remove this one

One of the vectors is unnecessary.

2) Sort the 2 or 3 parallel vectors in ascending order of the words or the number of times the words appear in the file.

 

#include <cassert> 

#include <iostream>

#include <fstream>

#include <iomanip>

#include <iostream>

#include <string>

#include <vector>

#include <cmath>

#include <algorithm>

 

using namespace std;

const string empty_string = "";

vector<string> getWords(const string& text);

int findWord(const vector<string>& words, const string& word);

int main()

{

    vector<string> all_words;

    vector<int> all_word_counts;

    vector<vector<int>> all_line_numbers; // this was removed

   

    string input_file_name;

    cout << "Source file name? ";

    getline(cin, input_file_name);

    ifstream finp;

    finp.open(input_file_name);

    assert(finp.good());

 

    string line;

    int word_counter = 0;

    int max_word_length = 0;

    int max_word_count = 0;

    int line_number = 0;

    getline(finp, line);

    while (!finp.eof())

    {

        line_number++;

        vector<string> words = getWords(line);

        word_counter += words.size();

        for (int idx = 0; idx < words.size(); ++idx)

        {

            int widx = findWord(all_words, words[idx]);

            if (widx == -1)

            {

                cout << words[idx] << endl;

                all_words.push_back(words[idx]);

                all_word_counts.push_back(1);

                vector<int> word_line_numbers;

                word_line_numbers.push_back(line_number);

 

                if (words[idx].length() > max_word_length)

                    max_word_length = words[idx].length();

            }

            else

            {

                all_word_counts[widx]++;

                // all_line_numbers[widx].push_back(line_number);

                if (all_word_counts[widx] > max_word_count)

                    max_word_count = all_word_counts[widx];

            }

        }

        getline(finp, line);

     }

    sort(all_word_counts.begin(), all_word_counts.end()); //added

    finp.close();

    string output_file_name = input_file_name;

    string time_as_string = to_string(static_cast<int>(time(nullptr)));

    int period_pos = input_file_name.find_last_of('.');

    if (period_pos == -1)

        output_file_name = output_file_name + time_as_string + ".txt";

    else

        output_file_name = output_file_name.replace(period_pos, output_file_name.length() - period_pos + 1, time_as_string + ".txt");

    ofstream fout;

    fout.open(output_file_name);

    assert(fout.good());

    cout << word_counter << endl;

    const int word_counts_fwidth = static_cast<int>(log10(max_word_count)) + 1;

    const int line_number_fwidth = static_cast<int>(log10(line_number)) + 1;

    const int words_per_line = 36;

    int newindex = 0;

    for (int idx = 0; idx < all_words.size(); ++idx)

    {

        fout << setw(max_word_length) << left << all_words[idx] << ' ' << right << setw(word_counts_fwidth) << right << all_word_counts[idx] << endl;

        //for (int idx2 = 0; idx2 < all_line_numbers[idx].size(); ++idx2)

        for (int idx2 = 0; idx2 < all_word_counts[idx]; ++idx2)

        {

            if (idx2 != 0 && idx2 % words_per_line == 0)

                fout << endl;

            fout << setw(line_number_fwidth) << right << ++newindex << ' ';

        }

        fout << endl;

        fout << endl;

    }

    fout.close();

    system("pause");

    return 0;

}

int findWord(const vector<string>& words, const string& word)

{

    for (int idx = 0; idx < words.size(); ++idx)

        if (words[idx] == word)

            return idx;

    return -1;

}

vector<string> getWords(const string& text)

{

    vector<string> words;

    int start_pos = 0;

    while (start_pos < text.length())

    {

        while (start_pos < text.length() && !isalnum(text[start_pos]))

            start_pos++;

        string word = empty_string;

        while (start_pos < text.length() && (isalnum(text[start_pos])))

        {

            word += static_cast<char>(toupper(text[start_pos]));

            start_pos++;

        }

        if (word.length() > 0)

            words.push_back(word);

    }

    return words;

Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 2 steps

Blurred answer
Knowledge Booster
Array
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ for Engineers and Scientists
C++ for Engineers and Scientists
Computer Science
ISBN:
9781133187844
Author:
Bronson, Gary J.
Publisher:
Course Technology Ptr