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. :-)
