You can recognize a word W, recur to print the rest of the words in
reverse, then print W:

#include <stdio.h>
#include <string.h>

void print_words_in_reverse(char *s)
{
  char *e;
  while (isspace(*s)) s++;
  if (*s == '\0') return;
  e = s + 1;
  while (*e && !isspace(*e)) e++;
  print_words_in_reverse(e);
  printf("%.*s ", e - s, s);
}

int main(void)
{
  char line[16 * 1024];
  fgets(line, sizeof line, stdin);
  print_words_in_reverse(line);
  return 0;
}


On Jul 6, 12:40 pm, Tushar Bindal <[email protected]> wrote:
> good job
> but how can this be done in one traversal as asked on the Adobe Interview
> Questions 
> thread<https://groups.google.com/forum/#%21msg/algogeeks/oEL8z4wwMJY/FAVdr2M...>
> .
>
>
>
>
>
> On Wed, Jul 6, 2011 at 9:49 PM, Navneet Gupta <[email protected]> wrote:
> > I think somebody on this thread has asked this question but i am not
> > able to find that.
>
> > Question was if a string is like "my name is ram", then output should
> > be "ram is name my".
>
> > Wrote the code for same, so sharing.
>
> > #include<iostream>
> > #include<string>
> > using namespace std;
>
> > void SwapStringChars(string &str, int pos1, int pos2)
> > {
> >        char ch = str[pos1];
> >        str[pos1] = str[pos2];
> >        str[pos2] = ch;
> > }
>
> > void reverseString(string &str, int left, int right)
> > {
> >        for(int i = left ; i <= left + (right-left)/2 ; i++)
> >                SwapStringChars(str, i, right + left -i));
> > }
>
> > void reverseWordsInString(string &str)
> > {
> >        char space = ' ';
> >        int len = str.length();
> >        int startIndex = 0, endIndex = 0;
> >        while(endIndex < len - 1)
> >        {
> >                while(str[endIndex] != space && endIndex < len)endIndex++;
> >                reverseString(str, startIndex, endIndex-1);
> >                startIndex = endIndex;
> >                while(str[startIndex] == space)startIndex++;
> >                endIndex = startIndex;
> >        }
> > }
>
> > int main()
> > {
> >        string str;
> >        cout<<"\nEnter enter the string :";
> >        getline(cin,str);
>
> >        //Reverse whole string at once
> >        reverseString(str, 0, str.length() - 1);
>
> >        //Reverse Individual words in string
> >        reverseWordsInString(str);
> >        cout<<str;
> >        cin.get();
> >        return 0;
> > }
>
> > --
> > Regards,
> > Navneet
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Algorithm Geeks" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected].
> > For more options, visit this group at
> >http://groups.google.com/group/algogeeks?hl=en.
>
> --
> Tushar Bindal
> Computer Engineering
> Delhi College of Engineering
> Mob: +919818442705
> E-Mail : [email protected]
> Website:www.jugadengg.com- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to