Question:
Implement strrev is a possible interview question. How would you do it ?
The simple way is to go to the back of the string, allocate a buffer and push the character from the right to left into the buffer and return it.
But the above approach use extra space
Code:
char* str_rev(char* str)
{    char* istr = str;char* output= (char*) malloc(strlen(str));
    char* ioutput = output;while(*str != '\0') {
str++;
}
    while(--str != istr) {*output = *str;
output++;
}
*output = *str;
    *(output+1) = '\0';    return ioutput;}
void main(){char* rstr = str_rev("rajan");
}
How would you do without using this extra space?
Just swap the last element in the string with the first element until you reach the middle.
char* str_rev(char* str)
{    char* tstr = str;char* istr = tstr; // string start
while(*tstr != '\0') tstr++;
char* estr = --tstr; // string end
    while(istr != estr)    {        char tmp = *istr;*istr = *estr;
*estr = tmp;
istr++;
estr--;
}
    return str;}
void main(){char* ptr = strdup("rajan");
    char* rstr = str_rev(ptr);}
Important points:
- if char* ptr=”rajan” is used, the above program will crash since, “rajan” is a const literal present part of code segment which cannot be modified.
- strdup creates a new pointer from the input const char*. We use that to remove the const
- free on ptr should be called !!
 
 
No comments:
Post a Comment