Tuesday, March 18, 2014

Algorithm question: Write a function to reverse the order of the words in a string

E.g.:  empty string here    o/p: here string, empty

C++ Prog:

#include <iostream>
#include <map>
#include <tr1/unordered_map>
#include <tr1/unordered_set>

using namespace std;
using namespace tr1;


string reverseWordBtwIdx(string s, int i, int j){
if (i >= j) {return s;}
if (s.length() <= 1){return s;}
char c;

while(i < j){
c = s[i];
s[i] = s[j];
s[j] = c;
i++; j--;
}
return s;
}


void reverseWords(string s){
if (s.size() == 0){
cout << "empty string" << endl;
return;
}
int i = 0; //start idx
int j = s.length() - 1; //end idx
int itr = 0;

cout << "original string: " << s << endl;
s = reverseWordBtwIdx(s, 0, s.length()-1);

i = 0;
while(itr < s.length()){
i = 0; j = 0;

if(s[itr] != ' ')
{
i = itr; j = itr+1;
while(j < s.length()){
if(s[j] == ' '){
break;
}
j++;
}
if (j >= s.length()){
j = s.length();
}
s = reverseWordBtwIdx(s, i, j-1);
itr = j+1;
}
else{itr++;}
}
cout << "final string: " << s << endl;
return;
}


int main (int argc, char * const argv[]) {
string s = "empty string, here";

reverseWords(s);


    return 0;
}

No comments:

Post a Comment