Amazon Interview Question
Software Engineer / Developers@smareeud how do you pass each word into the function without '/0' in the end and if you concatenate it and pass , you wud have to change it back to space character. Instead we can maintain start and end of each word and jus swap the letters between them after first reversing the entire string.
void reverseWords(char *str)
{int start=0,end=0,length;
char temp;
length=strlen(str);
str=Rev(str);
while(end<length)
{if(str[end]!=' ')
{start=end;
while(end <length && str[end]!=' ')
end++;
end--;
while(end>start)
{temp=str[start];
str[start]=str[end];
str[end]=temp;
start++;end--;
}
}end++;
}
return;
}
okay my bad...i missed the using only Rev() part..
Here goes...
void reverseWords(char *str)
{int start=0,i=0,end=0,length;
char *temp;length=strlen(str);
str=Rev(str);
while(end<length)
{if(str[end]!=' ')
{start=end;
for(i=0;end <length && str[end]!=' ';i++)
{
temp[i++]=str[end++];
}
temp[i]='\0';
temp=Rev(temp);
end--;
for(i=0;start<=end;i++)
{str[start++]=temp[i];
}
}
end++;
}return;
}
void rev(char *str)
{
int len = strlen(str);
int cur = 0;
int start = 0;
itn end = len-1;
while(start < end)
{
char temp = str[start];
str[start] = str[end];
str[end] = temp;
}
start = 0;
end = 0;
while(cur < len)
{
while(str(cur) != ' ' && cur < len)
{
cur++;
end++;
}
end--;
while(start < end)
{
char temp = str[start];
str[start] = str[end];
str[end] = temp;
end--; start++;
}
start = end = ++cur;
}
}
void reverse(char *str)
{
rev(str);
int start = 0;
int end = 0;
int cur = 0;
int len = strlen(str);
while(cur < length)
{
if(str[cur] != ' ' && cur < length)
{
cur++;
}
else
{
str[cur] = '\0';
rev(&str[start]);
str[cur++] = ' ';
start = cur;
}
}
}
void *rev(char *str)
{
int len = strlen(str);
int start = 0;
itn end = len-1;
while(start < end)
{
char temp = str[start];
str[start] = str[end];
str[end] = temp;
}
}
#include<stdio.h>
#include<string.h>
void reverse(char str[])
{
int end=0,start=0,cur=0,len;
char temp;
while(str[end] != NULL) end++;
end--;
len = end;
while(end>start) {
temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
puts(str);
start = 0;
end = 0;
while(cur < len)
{
while(str[cur] != ' ' && cur <= len)
{
cur++;
end++;
}
end--;
while(start < end)
{
char temp = str[start];
str[start] = str[end];
str[end] = temp;
end--; start++;
}
start = end = ++cur;
}
puts(str);
}
int main()
{
char arr[] = "my name is tom";
puts(arr);
reverse(arr);
return 0;
}
select replace(wm_concat(reverse(substr(' '||reverse('my name is sandeep') ||' ',
level,instr(' '||reverse('my name is sandeep') ||' ',' ',level+1)-
instr(' '||reverse('my name is sandeep') ||' ',' ',level)))),',','')
from dual connect by level<=length(' '||reverse('my name is sandeep') ||' ')
Call Rev for the entire string and then call Rev for each word.
- caffeine_coder November 10, 2009