Sort and Format a List of Names
#include
#include
#include
#include
#include
using namespace std;
constint MAX_SIZE = 30; //maximum number of unique names in data file
//Functions to be used
voidfixname(string&);
void unique(string[], string[], string)
voidbubblesort(string secondArray[], int count)
int main()
{
ifstreaminfile; //variable representing input file
ofstreamoutfile; //variable representing output file
stringinputf,outputf; //name of input file and output file
string name; //name read from input file
stringfirstArray[MAX_SIZE]; //array of names from data file
stringsecondArray[MAX_SIZE]; //second array to store unique names in
cout<< “enter input file name” <
cin>>inputf;
infile.open(inputf.c_str());
if (!infile)
{
cout<<“File not found” <
return 0;
}
else
{
cout<< “enter output file name” <
cin>>outputf;
outfile.open(outputf.c_str(),ios::app);
infile>> name;
for (int i = 0; i < MAX_SIZE; i++)
{
infile>>firstArray[i];
}
}
while (infile)
{
}
infile.close();
}
return 0;
}
voidbubblesort(string secondArray[], int count) //This function will use the bubblesort method to sort the list of \
names in alphabetical (ascending) order.
{
string temp;
for (int i = 0; i < count – 1; i++)
for (int j = 0; j < count – (i + 1); j++)
if (secondArray[j] >secondArray[j+1])
{
temp = secondArray[j];
secondArray[j] = secondArray[j+1];
secondArray[j+1] = temp;
}
}
void unique(string firstArray[], string secondArray[], string name) //This function will compare all of the strings \
from the data file and keep a count of unique strings found. It will also store the unique names in the second array\
{
int n = 0;
for (int i = 0; i < count; i++) //this needs to use count and not the constant for MAX_SIZE
for (int j = 0; j < i; j++)
if ((j != i) && (firstArray[j] != firstArray[i]))
{
secondArray[n] = firstArray[i];
count++;
n++;
}
return;
}
voidfixname(string& name) //This function will properly format the names in the output file.
{
int n; //length of name
n = name.length();
name[0] = toupper(name[0]); //This will change the first character of each name to a capital letter
for (int i = 1; i < n; i++)
name[i] = tolower(name[i]); //This will change the remaining letters to all lowercase.
}
//Function for finding length of longest name(s)
//Function for finding length of shortest name(s)
//Function for printing results to output file
Solution
#include
#include
#include
#include
#include
using namespace std;
constint MAX_SIZE = 30; //maximum number of unique names in data file
//Functions to be used
voidfixname(string&);
voidbubblesort(string[], int);
int max(int[],int);
int min(int[],int);
voidout_write(string, string, int, double, int, int, int[], string[]);
int main()
{
ifstreaminfile; //variable representing input file
stringinputf,outputf; //name of input file and output file
string name; //name read from input file
stringfirstArray[MAX_SIZE]; //array of names from data file
int length[MAX_SIZE]; //second array to store unique names in
int flag, size, count=0,sum=0;
doubleavg_length;
intmax_length, min_length;
cout<< “enter input file name” <
cin>>inputf;
infile.open(inputf.c_str());
if (!infile)
{
cout<<“File not found” <
return 0;
}
else
{
cout<< “enter output file name” <
cin>>outputf;
for (int i = 0; i
{
infile>> name;
fixname(name);
flag = 1;
for (int j = 0;j
if (name == firstArray[j]){ //checking uniqueness
flag = -1;
break;
}
}
if (flag == 1){
firstArray[count] = name;
length[count] = name.length();
sum = sum + length[count];
count++;
}
}
avg_length = (1.0*sum)/count;
max_length = max(length,count);
min_length = min(length,count);
}
infile.close();
out_write(inputf,outputf,count,avg_length,max_length,min_length,length,firstArray);
return 0;
}
voidbubblesort(string firstArray[], int count) //This function will use the bubblesort method to sort the list of \
names in alphabetical (ascending) order.
{
string temp;
for (int i = 0; i < count – 1; i++)
for (int j = 0; j < count – (i + 1); j++)
if (firstArray[j] >firstArray[j+1])
{
temp = firstArray[j];
firstArray[j] = firstArray[j+1];
firstArray[j+1] = temp;
}
}
voidfixname(string& name) //This function will properly format the names in the output file.
{
int n; //length of name
n = name.length();
name[0] = toupper(name[0]); //This will change the first character of each name to a capital letter
for (int i = 1; i < n; i++)
name[i] = tolower(name[i]); //This will change the remaining letters to all lowercase.
}
//Function for finding length of longest name(s)
int max(int length[], int count){
intmax_length = length[0];
for (int i = 0;i
if (length[i]>max_length)
max_length = length[i];
}
returnmax_length;
}
//Function for finding length of shortest name(s)
int min(int length[], int count){
intmin_length = length[0];
for (int i = 0;i
if (length[i]
min_length = length[i];
}
returnmin_length;
}
//Function for printing results to output file
voidout_write(string inputf, string outputf, int count, double avg_length, intmax_length, intmin_length, int length[], string firstArray[]){
ofstreamoutfile; //variable representing output file
outfile.open(outputf.c_str());
outfile<< “name section lab_section assignment\n\n”;
outfile<< “Input file: ” <
outfile<< “Number of unique names: ” << count <<“\n”;
outfile<< “Average length of a name: ” <
outfile<< “Length of longest names: ” <
outfile<< “Longest names: “;
for (int i = 0;i
if (length[i]==max_length)
outfile<
}
outfile<< “\n\nLength of longest names: ” <
outfile<< “Shortest names: “;
for (int i = 0;i
if (length[i]==min_length)
outfile<
}
outfile<
bubblesort(firstArray,count);
for (int i = 0; i < count; i++)
{
outfile<< “\n” <
}
outfile.close();
}