Question

In: Computer Science

Please Write C++ PROGRAM : That will write a program that initially prompts the user for...

Please Write C++ PROGRAM :

That will write a program that initially prompts the user for a file name. If the file is not found, an error message is output, and the program terminates. Otherwise, the program prints each token in the file, and the number of times it appeared, in a well formatted manner. To accomplish all this, do the following:

- Open the file - the user must be prompted and a file name input. DO NOT hardcode a file name.

- Read the words in the file, placing them in an array of struct with capacity I 00, where each struct has a string (the word) and an int (number of occurrences)

- Sort the array, eliminating duplicates

- Report the results

- You must write appropriate functions for each task. At minimum, you must write a function for each of the following:

• Open the file:

o    Pass in an ifstream (must be a reference argument [what type of parameter is it?]). The function prompts the user and, if the file is found, it returns true and the ifstream will be a handle for that text file. Otherwise the function returns false , and the argument is assumed to be undefined.

• Populate the array of struct with the words in the file:

o    Pass in two reference arguments, the ifstrcam, and the l 00 element array of word/count structs. When the function completes, the array will hold the words in the file.

• Output results:

o    Pass in the variables that bold the file name and the word/count array. Use this data to

produce the desired ouput, which should be appropriately fonnatted.

• Sort an array of structs (the name/int pairs), eliminating duplicates:

o    Pass in the array of struct, and the number of elements in the array. The function sorts the array, in ascending order of words, eliminating duplicates and tabulating counts as it goes. It definitely uses other functions for specific purposes, e.g. identifying duplicate tokens and swapping structs.

• Increment the counter member of a struct that holds a word and its multiplicity:

o    Pass in a single struct; it will be an import/export parameter. Simply increment its counter member.

----------------------------------------------------------------------------

Notes:

» A word, or token, is whatever is read using the >> operator. A word followed by a period is distinct from the same word without the period. Words are also case sensitive, i.e. heLLo is not equal to Hello.

» When a word is placed into the array of struct, its counter is initially 1.

» When the array reaches capacity:

If there aren't 100 unique words already in the array, run the sort function to eliminate duplicates.

If the file has 100 unique words, then after the tooth unique word is added to the array, only repeats will be tabulated. New tokens will be discarded.

» While several functions are required, other functions should be written as well.

No function..should handle multiple tasks on its own. Non-modular designs will be penalized.

» In sorting, if the word being placed is a duplicate, the already placed word must have its counter incremented, and the duplicate must be removed from the array.

- The program must be well written, properly indented, and commented

Solutions

Expert Solution

PROGRAM CODE:

/*
* WordCount.cpp
*
* Created on: 22-Feb-2017
* Author: kasturi
*/

#include <iostream>
#include <fstream>
#include <string.h>
#include <iomanip>
#include <ctype.h>
#include <sstream>
using namespace std;

#define CAPACITY 100

/**
* Struct for holding the word and the count
*/
struct words
{
   string word;
   int count;
};

/**
* function to get the file name from the user and then open the file
*/
bool openFile(ifstream &infile)
{
   string inputFile;
   cout<<"Enter the input file name: ";
   cin>>inputFile;
   infile.open(inputFile);
   if(!infile.good())
   {
       cout<<"Either the file is not available or is locked by another program\n";
       return false;
   }
   else return true;
}

/**
* increments the counter for the word by 1
*/
void increment(struct words &word)
{
   word.count++;
}

/**
* swaps two structs of words
*/
void swap(struct words &word1, struct words &word2)
{
   struct words temp = word1;
   word1 = word2;
   word2 = temp;
}

/**
* sorts the words in ASCII order
*/
void sort(struct words wordArray[], int &size)
{
   for(int m=0; m<size; m++)
   {
       for(int n=0; n<size; n++)
       {
           if(wordArray[m].word.compare(wordArray[n].word) < 0)
           {
               swap(wordArray[m], wordArray[n]);
           }
       }
   }
}

/**
* checks the array for duplicate words
*/
bool isDuplicate(struct words wordsArray[], int size, string word)
{
   for(int i=0; i<size; i++)
   {
       if(wordsArray[i].word == word)
       {
           increment(wordsArray[i]);
           return true;
       }
   }
   return false;
}
/*
*processes the file and adds words into the array, if already available then increases the count of the word
*/
void process(struct words wordsArray[], ifstream &infile)
{
   string line;
   int counter = 0;
   bool canBeAdded = true;
   while(getline(infile,line ))
   {
       istringstream iss(line);
       string word;
       while(true)
       {

           if(!(iss>>word))
           {
               break;
           }

           if(!isDuplicate(wordsArray, counter, word) && canBeAdded)
           {
               wordsArray[counter].word = word;
               wordsArray[counter].count = 1;
               counter++;
           }
           if(counter==CAPACITY)
           {
               sort(wordsArray, counter);
               canBeAdded = false;
           }
       }
       if(canBeAdded)
           sort(wordsArray, counter);
   }
}

/**
* prints the array to console
*/
void printResult(struct words wordsArray[])
{
   cout<<"\nWord\t\t\t"<<"Count\t\t"<<"\n";
   for(int i=0; i<CAPACITY; i++)
   {
       if(wordsArray[i].count != 0)
       {
           cout<<fixed<<setprecision(2);
           string word = wordsArray[i].word;
           while(word.length()<25)
               word+= " ";
           cout<<word<<to_string(wordsArray[i].count)<<endl;

       }
   }
}


/**
* main function
*/
int main()
{
   ifstream in;
   struct words wordsArray[CAPACITY];
   openFile(in);
   process(wordsArray, in);
   printResult(wordsArray);
   in.close();
}

INPUT:

This is just sample text to check whether the program is working fine or not.

The program has many functions. Assuming that the count for the words in this file will go more than hundred words.

I have no idea what more to write here.

Make sure to keep the file int he correct location.

Otherwise once placing the file at a location, copy the path and paste it in the ifstream filename path. writing more the the the the

is is is is why why why why. face face face face

OUTPUT:

Enter the input file name: textfile.txt

Word           Count      

Assuming 1

I 1

Make 1

Otherwise 1

The 1

This 1

a 1

and 1

at 1

check 1

copy 1

correct 1

count 1

face 4

file 3

filename 1

fine 1

for 1

functions. 1

go 1

has 1

have 1

he 1

here. 1

hundred 1

idea 1

ifstream 1

in 2

int 1

is 6

it 1

just 1

keep 1

location, 1

location. 1

many 1

more 3

no 1

not. 1

once 1

or 1

paste 1

path 1

path. 1

placing 1

program 2

sample 1

sure 1

text 1

than 1

that 1

the 11

this 1

to 3

what 1

whether 1

why 3

why. 1

will 1

words 1

words. 1

working 1

write 1

writing 1


Related Solutions

write this program in C++ Write a program that prompts a user for three characters. The...
write this program in C++ Write a program that prompts a user for three characters. The program must make sure that the input is a number 10 - 100 inclusive. The program must re prompt the user until a correct input is entered. Finally output the largest and the lowest value. Example 1: Input : 10 Input : 20 Input : 30 The largest is 30. The lowest is 10. Example 2: Input : 100 Input : 50 Input :...
Write a C++ Program Write a program that prompts the user to input a string. The...
Write a C++ Program Write a program that prompts the user to input a string. The program then uses the function substr to remove all the vowels from the string. For example, if str=”There”, then after removing all the vowels, str=”Thr”. After removing all the vowels, output the string. Your program must contain a function to remove all the vowels and a function to determine whether a character is a vowel. You must insert the following comments at the beginning...
C# PLEASE Lab7B: For this lab, you’re going to write a program that prompts the user...
C# PLEASE Lab7B: For this lab, you’re going to write a program that prompts the user for the number of GPAs to enter. The program should then prompt the user to enter the specified number of GPAs. Finally, the program should print out the graduation standing of the students based on their GPAs. Your program should behave like the sample output below. Sample #1: Enter the number of GPAs: 5 GPA #0: 3.97 GPA #1: 3.5 GPA #2: 3.499 GPA...
Please code C# 8. Write a program that prompts the user to enter an integer. The...
Please code C# 8. Write a program that prompts the user to enter an integer. The program then determines and displays the following: Whether the integer is divisible by 5 and 6 Whether the integer is divisible by 5 or 6
Write a C++ program that prompts the user for the radius of a circle and then...
Write a C++ program that prompts the user for the radius of a circle and then calls inline function circleArea to calculate the area of that circle. It should do it repeatedly until the user enters -1. Use the constant value 3.14159 for π Sample: Enter the radius of your circle (-1 to end): 1 Area of circle with radius 1 is 3.14159 Enter the radius of your circle (-1 to end): 2 Area of circle with radius 2 is...
Write a program in C that prompts the user for a number of seconds and then...
Write a program in C that prompts the user for a number of seconds and then converts it to h:m:s format. Example: 5000 seconds should display as 1:23:20 (1 hour, 23 minutes, 20 seconds.) Test with several values between about 100 seconds and 10,000 seconds. use unint and remainders for this and keep it as simple as possible.
C++ Question: write a program that prompts the user for the length and width of a...
C++ Question: write a program that prompts the user for the length and width of a rectangle in inches.  The program then uses functions to compute the perimeter and area of the rectangle and to convert those to meters and square meters respectively. Sample output from one instance of the program is shown below: ```html Welcome to the Foot-To-Meter Rectangle Calculator ================================================= Enter the rectangle length in feet: 2 Enter the rectangle width in feet: 3 The rectangle dimensions are: 0.61...
IN C++ Write a program that prompts the user to enter the number of students and...
IN C++ Write a program that prompts the user to enter the number of students and each student’s name and score, and finally displays the student with the highest score (display the student’s name and score). Also calculate the average score and indicate by how much the highest score differs from the average. Use a while loop. Sample Output Please enter the number of students: 4 Enter the student name: Ben Simmons Enter the score: 70 Enter the student name:...
C++ Program: Write a program that prompts the user for two numbers and stores them in...
C++ Program: Write a program that prompts the user for two numbers and stores them in signed integers. The program should then add those two numbers together and store the result in a signed integer and display the result. Your program should then multiply them by each other and store the result in another integer and display the result. Then do the same but with dividing the first number by the second. Display an error message to the screen if...
C# Programming Language Write a C# program ( Console or GUI ) that prompts the user...
C# Programming Language Write a C# program ( Console or GUI ) that prompts the user to enter the three examinations ( test 1, test 2, and test 3), homework, and final project grades then calculate and display the overall grade along with a message, using the selection structure (if/else). The message is based on the following criteria: “Excellent” if the overall grade is 90 or more. “Good” if the overall grade is between 80 and 90 ( not including...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT