[STRING] Reverse
16 September, 2013 - 2 min read
Problem: Given a string of unknown length reverse it in place.
Solution: Lets take a sample string "hello". When reversed it should read as "olleh". For those who are new to C/C++, a string has null terminator at the end. This null terminator denotes the end of the string. So, when you say declare a string in C language like: char *str = "hello";
How many bytes of memory does it take to store that string? 5 (for the characters) +1 (for the null). The representation of the string in memory looks like this:
Now, the reverse string should look like as shown below: If you notice, we just need to swap the first and the last characters, the 2nd and the 2nd last, 3rd and 3rd last and so on.
Code:
int main(int argc, char* argv[]) { char str[7] = "hello"; // create an array of characters of size 7 // and assign the string hello to it. // Last char will be '' (null terminator) printf("%s", str); // this will print hello reverse(str); printf("%s", str); // this will print olleh return 0; } void reverse(char * str) { char * begin = str; char * end = str; // position the end pointer at the last character while(*(end+1) != NULL) { end++; } while(begin < end) // as long as begin pointer is less than end pointer { // swap the characters char temp = *begin; *begin = *end; *end = temp; begin++; //increment the begin ptr end--; //decrememnt the end pointer } }
END