|
|
| Question |
Given an array of characters which form a sentence of
words, give an efficient algorithm to reverse the order of
the words (not characters) in it.
|
|
Question Submitted By :: Maggy |
|
I also faced this Question!! |
Rank |
Answer Posted By |
| |
|
Re: Given an array of characters which form a sentence of
words, give an efficient algorithm to reverse the order of
the words (not characters) in it.
|
Answer
# 1 |
#include"stdio.h"
#include"stdlib.h"
int reverse(char *string, char delimiter)
{
char *src, *dest;
char *temp = string;
while( *temp )
{
if (*temp == delimiter)
{
temp++;
continue;
}
src=dest=temp;
while ( (*(dest+1) != delimiter) &&
( *(dest+1) != '\0' )) dest++;
//( *(dest+1) != '\n' ) &&
temp=dest+1;
while( dest > src )
{
char tmp = *dest;
//*dest -- = *src;
*dest = *dest-- *src;
//*src++=tmp;
*src = *src++ tmp;
}
}
return 0;
}
int main()
{
char name[] = "vinod kumar dhochak";
printf("%s\n",name);
reverse(name,' '); /* space as delimiter,Reverse Words
*/
printf("%s\n",name);
reverse(name,'\n'); /* Reverse Complete Sentence */
printf("%s\n",name);
}
|
| Vinod Kumar | | |
|
Re: Given an array of characters which form a sentence of
words, give an efficient algorithm to reverse the order of
the words (not characters) in it.
|
Answer
# 2 |
#include<iostream>
#include<vector>
using namespace std;
int main()
{
char str[]="rahul shandilya is going";
string ans;
int n=0;
while(str[n]!='\0')
n++;
//cout<<n;
bool flag=true;
for(int i=n-1;i>=0;i--)
{
if(str[i]==' ')
{
int m=i+1;
// cout<<m<<" ";
string temp;
while(str[m]!=' ' && m<n)
{
temp+=str[m];
m++;
}
//cout<<m<<" ";
if(flag)
{
ans+=temp;
flag=false;
continue;
}
if(flag==false)
{
ans+=' ';
ans+=temp;
}
}
}
cout<<ans;
system("pause");
return 0;
}
//tell me if there is a batter way to do it,i dont think my
//solution is efficent
|
| Rahul Shandilya | | | |
| | | | |
|
Re: Given an array of characters which form a sentence of
words, give an efficient algorithm to reverse the order of
the words (not characters) in it.
|
Answer
# 3 |
/*complexity-2n..check d prog. */
#include<iostream.h>
#include<string.h>
#include<stdio.h>
void rev_word(char str[20],int m,int n)
{
int i,l,k;
k=n-m+1;
if(k%2==0)
l=(k/2-1);
else
l=k/2;
k=n;
for(i=m;i<=m+l;i++)
{ count++;
char t=str[i];
str[i]=str[k];
str[k]=t;
k--;
}
}
int main()
{
char str[100];
int i,j=0;
cout<<"\n\nenter string:";
gets(str);
rev_word(str,0,strlen(str)-1);
for(i=0;i<=strlen(str);i++)
{ count++;
if(str[i]==' '||str[i]=='\0')
{
rev_word(str,j,i-1);
j=i;
while(str[j]==' ')
j++;
i=j;
}
}
cout<<"\n\nsentence with order of words reversed is:";
cout<<str;
return 0;
}
|
| Raghuram.A | | |
|
Re: Given an array of characters which form a sentence of
words, give an efficient algorithm to reverse the order of
the words (not characters) in it.
|
Answer
# 4 |
#include<stdio.h>
main()
{
int i=0,j=0,start=0,end=0,len,w_len;
char temp;
char str[]="Papa Kehte HAIN bada naam karega";
printf("Before reversing the words string is %s \n",str);
len=strlen(str);
for(i=0,j=len-1;i<j;i++,j--)
{
temp=str[j];
str[j]=str[i];
str[i]=temp;
}
for(i=0,j=0;str[i]!=0;)
{
i=j;
for(;str[i]!=' '&& i<len;)
i++;
w_len=(i-j)-1;
for(start=j,end=(start+w_len);start<end;start++,end--)
{
temp=str[start];
str[start]=str[end];
str[end]=temp;
}
j=i+1;
}
printf("After reversing the words string is %s \n",str);
}
|
| Vijay | | |
|
Re: Given an array of characters which form a sentence of
words, give an efficient algorithm to reverse the order of
the words (not characters) in it.
|
Answer
# 5 |
this works in O(n) as first reverse all the sentence....then
reverse each word....
#include<iostream.h>
#include<conio.h>
#include<string.h>
char a[50];
void wrd_reverse()
{
void str_rev(int start_index,int len);
int t=strlen(a);
str_rev(0,t);
int i=0;int st_indx=0;int count=0;
int size;
while(a[i]!='\0')
{
if(a[i]!=' ')
count++;
else
{
size=count;
str_rev(st_indx,size);
count=0;
st_indx=i+1;
}
i++;
}
size=count;
str_rev(st_indx,size);
}
void str_rev(int start_index,int len)
{
int sft=start_index;
int lenm=len/2;
len--;
for(int i=0;i<lenm;i++)
{
a[sft+i]=a[sft+i]+a[(sft+len)-i];
a[(sft+len)-i]=a[sft+i]-a[(sft+len)-i];
a[sft+i]=a[sft+i]-a[(sft+len)-i];
}
}
int main(){
cin.getline(a,40);
void wrd_reverse();
wrd_reverse();
cout.write(a,40);
return 0;
}
|
| Ashish | | |
|
Re: Given an array of characters which form a sentence of
words, give an efficient algorithm to reverse the order of
the words (not characters) in it.
|
Answer
# 6 |
//check this program....
#include <string.h>
#include <stdio.h>
main(){
char a[100],b[100];
int i,j=0,c=0,k,cnt=0;
printf("enter the sentence\n");
for(i=0;i>=0;i++){
a[i]=getchar();
if(a[i]=='\n')break;
}
for(i=0;a[i]!='\n';i++)
cnt++;
for(i=0;i<(cnt+1);i++)
b[i]=' ';
for(i=0;i<(cnt+1);i++){
c++;
if((a[i]==' ')||(a[i]=='\n')){
c=c-1;
for(j=(cnt-i),k=(i-c);c>0;k++,j++,c--){
b[j]=a[k];
}c=0;
}
}
printf("result: ");
for(i=0;i<cnt+1;i++)
putchar(b[i]); printf("\n");
}
|
| Patrck | | |
|
|
|
|
|
| |
|