If we only need to print the words in reverse order, strtok+recursion
can help. Following is the code (which also stores the string into
another string, not memory efficient though):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char str[] = "This is a new world";
char sstr[sizeof(str)];
char *print_rev(char *tok)
{
char *nstr = NULL;
if (tok) {
nstr = strtok(NULL, " ");
print_rev(nstr);
if (nstr) {
// printf("%s ", nstr);
strcpy(&sstr[strlen(sstr)], nstr);
sstr[strlen(sstr)] = ' ';
}
}
return nstr;
}
int main(int argc, char *argv[])
{
char *nstr;
printf("Org string --> %s\n", str);
nstr = strtok(str, " ");
print_rev(str);
strcpy(&sstr[strlen(sstr)], nstr);
printf("New string --> %s\n", sstr);
return 0;
}
On Thu, Jul 7, 2011 at 9:10 AM, Navneet Gupta <[email protected]> wrote:
> @Piyush, could you elaborate your approach with Linked List?
> From what i am getting, even with Linked List, you would need two
> traversals at least.
>
> On Thu, Jul 7, 2011 at 2:07 AM, Piyush Sinha <[email protected]> wrote:
>> Can we do it using linked list if ONE TIME TRAVERSAL is a constraint??
>>
>> On 7/6/11, Tushar Bindal <[email protected]> wrote:
>>> I read that solution.
>>> But the same doubt as Navneet which I think you also raised i one of your
>>> posts on that thread
>>>
>>> On Wed, Jul 6, 2011 at 10:34 PM, Navneet Gupta <[email protected]>wrote:
>>>
>>>> Saurabh,
>>>>
>>>> I understood your solution but wonder if it is purely single traversal
>>>>
>>>> In affect, you have a second traversal when you are popping the
>>>> strings from stack to form the reverse order string.
>>>>
>>>> Though the second activity is less than O(n) i.e. O(#words in string)
>>>> Nice solution, this way we can also get rid of extra spaces easily in
>>>> the actual string if that is also to be done.
>>>>
>>>> On Wed, Jul 6, 2011 at 10:16 PM, saurabh singh <[email protected]>
>>>> wrote:
>>>> > I have proposed my solution in one of the previous posts.Check the
>>>> solution
>>>> > there
>>>> >
>>>> > On Wed, Jul 6, 2011 at 10:10 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.
>>>> >>
>>>> >>
>>>> >>
>>>> >> 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
>>>> >>
>>>> >> --
>>>> >> 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.
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > Saurabh Singh
>>>> > B.Tech (Computer Science)
>>>> > MNNIT ALLAHABAD
>>>> >
>>>> >
>>>> > --
>>>> > 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.
>>>> >
>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>>
>>> --
>>> 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.
>>>
>>>
>>
>>
>> --
>> *Piyush Sinha*
>> *IIIT, Allahabad*
>> *+91-8792136657*
>> *+91-7483122727*
>> *https://www.facebook.com/profile.php?id=100000655377926 *
>>
>> --
>> 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.
>>
>>
>
>
>
> --
> 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.
>
>
--
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.