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.
Answers were Sorted based on User's Feedback
Answer / patrck
//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");
}
Is This Answer Correct ? | 10 Yes | 1 No |
Answer / manish
int i, j, k;
int t = 0;
char[] c = "manish singhal is here".ToCharArray();
j = c.Length;
char[] b=new char[c.Length];
for (i = c.Length - 1; i >= 0; i--)
if ((i > 0 && c[i - 1] == ' ') || i == 0)
{
for (k = i; k < j; k++)
b[t++] = c[k];
if (i > 0)
b[t++] = c[--i];
j = i;
}
Console.WriteLine(b);
Console.ReadLine();
Is This Answer Correct ? | 4 Yes | 0 No |
Answer / vijay
#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);
}
Is This Answer Correct ? | 4 Yes | 1 No |
Answer / vinod kumar
#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);
}
Is This Answer Correct ? | 5 Yes | 6 No |
Answer / ashish
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;
}
Is This Answer Correct ? | 1 Yes | 2 No |
Answer / sujan
previously i hav read the question mistake so i hav jst given to reverese the whole sntence not a particular word so this one program will give u final ans....test this program...and if u hav any question please ask my through my emailid :sujan_faith@hotmail.com
#include<iostream>
using namespace std;
int main()
{
char str[]="sujan is name my haha";
string ans;
int n=0,j=0,t=0,a=0;
while (str[n]!='\0')
n++;
char temp[n];
char tem[n];
// cout<<n<<endl;
for(int i=n-1;i>=0;i--)
{
temp[j]=str[i];
j++;
if((str[i]==' ')||i==0)
{
// cout<<"i:"<<i<<endl;
// cout<<"j:"<<j<<endl;
for(int k=j-1;k>=t;k--)
{
tem[a]=temp[k];
a++;
}
t=a;
}
}
tem[a]='\0';
// temp[j]='\0';
// cout<<temp<<endl;
cout<<tem<<endl;
system("pause");
}
Is This Answer Correct ? | 0 Yes | 1 No |
Answer / rahul shandilya
#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
Is This Answer Correct ? | 3 Yes | 5 No |
Answer / sujan
#include<iostream>
using namespace std;
int main()
{
char str[]="najus si eman ym";
string ans;
int n=0,j=0;
while (str[n]!='\0')
n++;
char temp[n];
// cout<<n;
for(int i=n-1;i>=0;i--)
{
temp[j]=str[i];
j++;
}
temp[j]='\0';
cout<<temp<<endl;
system("pause");
}
Is This Answer Correct ? | 0 Yes | 2 No |
Answer / raghuram.a
/*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;
}
Is This Answer Correct ? | 0 Yes | 6 No |
main() { int i=-1; +i; printf("i = %d, +i = %d \n",i,+i); }
Write a c program to search an element in an array using recursion
#include<stdio.h> main() { int a[2][2][2] = { {10,2,3,4}, {5,6,7,8} }; int *p,*q; p=&a[2][2][2]; *q=***a; printf("%d..%d",*p,*q); }
void main() { char far *farther,*farthest; printf("%d..%d",sizeof(farther),sizeof(farthest)); }
Write a function to find the depth of a binary tree.
13 Answers Adobe, Amazon, EFI, Imagination Technologies,
main() { extern int i; i=20; printf("%d",sizeof(i)); }
main() { int i=10; void pascal f(int,int,int); f(i++,i++,i++); printf(" %d",i); } void pascal f(integer :i,integer:j,integer :k) { write(i,j,k); }
Write a program that reads a dynamic array of 40 integers and displays only even integers
main() { int i, n; char *x = “girl”; n = strlen(x); *x = x[n]; for(i=0; i<n; ++i) { printf(“%s\n”,x); x++; } }
#if something == 0 int some=0; #endif main() { int thing = 0; printf("%d %d\n", some ,thing); }
main( ) { void *vp; char ch = ‘g’, *cp = “goofy”; int j = 20; vp = &ch; printf(“%c”, *(char *)vp); vp = &j; printf(“%d”,*(int *)vp); vp = cp; printf(“%s”,(char *)vp + 3); }
Sir... please give some important coding questions asked by product companies..