Answer:
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <algorithm>
using namespace std;
void matrixInit( vector< vector<int> >& matrix, int numRows, int numCols);
struct TokenFreq{
string token;
int freq;
};
string spaces(string& istr, string& newstr);
void printVector(vector<TokenFreq> & tfVec);
void getTokenFreqVec( string& istr, vector<TokenFreq> & tfVecVec);
void selectionSort( vector<TokenFreq> & tokFreqVector );
void insertionSort( vector<TokenFreq> & tokFreqVector );
//main
int main(int argc, const char * argv[]) {
vector<vector<int> > matrix;
matrixInit(matrix, 3, 4);
string ostr1 = " I do keep the main points straight in my head most of the time, and I do know where to find the details when I need them. by Bjarne Stroustrup";
string ostr2 = " ";
string ostr3 = "Your time is limited, so don’t waste it living someone else’s life.Stay Hungry. Stay Foolish.";
//string ostr = ostr2;
string istr;
cout << "Enter the text: ";
getline(cin, istr);
vector<TokenFreq> tfVec;
getTokenFreqVec(istr, tfVec);
selectionSort(tfVec);
insertionSort(tfVec);
return 0;
}
//-----
void selectionSort( vector<TokenFreq> & tokFreqVector ){
TokenFreq temp;
int min;
for( int i = 0; i < int(tokFreqVector.size()-1); i++){
min = i;
for (int j = i+1; j <int(tokFreqVector.size()); j++){
if (tokFreqVector[j].freq < tokFreqVector[min].freq)
min = j;
}
if(min!=i)
{
temp = tokFreqVector[i];
tokFreqVector[i] = tokFreqVector[min];
tokFreqVector[min] = temp;
}
}
cout<<"-----selectionSort------------------"<<endl;
printVector(tokFreqVector);
}
void insertionSort( vector<TokenFreq> & tokFreqVector ){
TokenFreq temp;
int max;
for( int i = 0; i < int(tokFreqVector.size()-1); i++){
max = i;
for (int j = i+1; j < int(tokFreqVector.size()); j++){
if (tokFreqVector[j].freq > tokFreqVector[max].freq)
max = j;
}
if(max!=i)
{
temp = tokFreqVector[i];
tokFreqVector[i] = tokFreqVector[max];
tokFreqVector[max] = temp;
}
}
cout<<"-----insertionsort------------------"<<endl;
printVector(tokFreqVector);
}
string spaces(string& istr, string & newstr){
int j;
//Check double space and create new string with lowercase
for (int i = 0; i < int(istr.length()); ++i){
istr[i] = tolower(istr[i]);
if (isspace(istr[i])){
//check double space again
j = i+1;
while(true){
if (istr[j] == '\342') istr[j]=' ';
if (istr[j] == '\200') istr[j]=' ';
if (istr[j] == '\224') istr[j]=' ';
if(isspace(istr[j])) j++;
else break;
}
i=j-1;
newstr = newstr + istr[i];
}else
newstr = newstr + istr[i];
}
return newstr;
}
void getTokenFreqVec( string& istr, vector<TokenFreq> & tfVec){
string newstr;
int curr_beg = 0;
int curr_end = 0;
string word;
bool check = false;
int index=0;
//call func spaces to get new string
newstr = spaces(istr, newstr);
//cout << newstr << endl;
//cout << endl;
//cout << newstr << "||" << endl;
string tempstr = newstr;
if(newstr != " "){
tfVec.push_back(TokenFreq());
}
for (int i = 0; i < int(newstr.length()); ++i){
if(isspace(newstr[i])){
check = false;
curr_end = i;
word = tempstr.substr(curr_beg, curr_end - curr_beg);
curr_beg = i + 1;
for (int j = 0; j < int(tfVec.size()); j++){
if (tfVec[j].token == word){
tfVec[j].freq++;
check = true;
break;
}
}//end-for;
if (check == false && i!=(int(newstr.length())-1)){
//cout <<"**"<< word <<"**"<<word.length()<< endl;
tfVec[index].token=word;
tfVec[index].freq=1;
index++;
tfVec.push_back(TokenFreq());
}
word = "";
//add last value
}
}//end-for
if(!isspace(newstr[int(newstr.length())-1])){
word = tempstr.substr(curr_beg, curr_end - (int(newstr.length())-1));
tfVec[index].token=word;
tfVec[index].freq=1;
//tfVec.push_back(TokenFreq());
}
printVector(tfVec);
}
void printVector(vector<TokenFreq> & tfVec){
cout << "size= {" << tfVec.size() << endl;
for (int i = 0; i < int(tfVec.size()); i++){
cout << " [" << i << "] = (token = \""<< tfVec[i].token <<"\", freq = " << tfVec[i].freq << ")" << endl;
//cout << tfVec[i].token<<endl;;
}
cout << endl;
}
void matrixInit( vector< vector<int> >& matrix, int numRows, int numCols){
int i;
int j;
matrix.resize(numRows, vector<int>(numCols) );
for(i = 0; i< numRows; i++ ){
for(j = 0; j < numCols; j++ )
matrix[i][j] = i*j;
}
cout << "size of matrix is: " << numRows << "x" << numCols << endl;
for (i = 0; i < numRows; i++){
for (j = 0; j < numCols; j++){
cout<< "matrix[" << i << "][" << i << "]=" << matrix[i][j] << endl;
}
}
cout << endl;
}
Explanation: