The need:
This is another way ( a layman's approach) to write previous program about this topic. I have written the approach there too.
The code:
----------------------------------------------------------
#include<stdio.h> #include<string.h> #include<stdlib.h> struct linked_list { char *chr; struct linked_list *next; }; typedef struct linked_list node; void push(node **p,char *x); char *pop(node **p); int main() { char a[50],*temp,*dup; strcpy(a,"I dont know why useless programs are asked"); node * head=NULL; temp=strtok(a," "); while(temp != NULL) { dup=strdup(temp); temp=strtok(NULL," "); push(&head,dup); } strcpy(a,""); while((temp=pop(&head))!=NULL) { strcat(a,temp); strcat(a," "); } a[strlen(a)-1]='\0'; printf("%s\n",a); return 0; } void push(node **p,char *x) { node *new_node; new_node=(node *)malloc(sizeof(node)); new_node->chr=x; new_node->next=*p; *p=new_node; } char *pop(node **p) { char *temp=NULL; node *tmp; if(*p==NULL) return (NULL); else { temp=(*p)->chr; tmp=*p; (*p)=(*p)->next; free(tmp); return (temp); } }
----------------------------------------------------------
Approach:In that case I have made use of my stack concepts and using almost no brain I have got it done. Have a look how simple is this. Steps are:
1. read word by word (strtok has been used to read words delimiter is space)
2. keep on pushing all words on a stack till last word.
3. Now pop each word and print. :-)
Remarks:
1. This is not the most efficient method to do this. For more efficient method have a look at previous program about this topic.
2. This program can also be used to reverse the order of words in a file. In that case steps are:
- read word by word (using fscanf(FilePointer,"%s",&TempString)).
- keep on pushing all words on a stack till last word.
- Now pop each word and print to another file. :-)