Reverse a string in C
Another string operation that we are going to look at is reversing a given string.
Reverse of a string “HELLO ” would be “OLLEH”, and in order to do so, we would have to swap the first and last characters, the second and the second last characters and so on.
First, let us see the simpler approach of using pre-defined C functions.
Approach 1: Using the functions strrev() from string.h:
- strrev() reverses a given input string.
-rev function int main(){ clrscr(); char string[100] ; printf("Enter a string : \n"); fgets(string, 100, stdin); //read string input from standard input screen. printf("Reverse is :\n", strrev(string)); getch(); return 0; }
Output:
Approach 2: Without using pre-defined functions of C:
- In this approach, we will use 3 ways to reverse the string.
- Number 1: We will just display the string in reverse. We shall just display the string characters using the index in reverse order.
- Number 2: We will store the characters of the original string in reverse order in a string called ‘reverse_string’.
- Number 3: We will use a temporary character called ‘temp’, to store the ith character which will initially be the first character on a temporary basis; while we store the last character jth character , at the first position (ith) in the string. The temp value is then assigned to the jth place.
Code:
#include <stdio.h> int main() { int size = 100, bytes_read, length, i, j; char *string, reverse_string[100], temp; printf("Enter some text of your choice: "); string = (char *) malloc (size); bytes_read = getline (&string, &size, stdin); length = bytes_read - 1; //Just displaying string in reverse printf("Displaying the string in reverse: "); for(i= (length - 1); i>=0; i--) { putchar(string[i]); } j = 0; //initalizing counter for original string //Reverse string stored in another string for(i= (length - 1) ; i >= 0; i--) { reverse_string[i] = string[j]; //storing the value of string in reverse order j++; } reverse_string[length] = '\0'; //string termination printf("\n\nThe reverse of string is: %s\n", reverse_string); //Using a temp character and making changes in the original array i = 0; j = length - 1; while (i < j) { temp = string[i]; string[i] = string[j]; string[j] = temp; i++; j--; } printf("\n\nThe reverse string is: %s\n", string); return 0; }
Output:
Enter some text of your choice: hello World ! Displaying the string in reverse: ! dlroW olleh The reverse of string is: ! dlroW olleh The reverse string is: ! dlroW olleh
Approach 3: Using Recursion:
- In the recursive method, we swap characters at the beginning and the end of the string and then move towards the middle of the string.
- This way is inefficient due to repeated function calls.
- Our Base case is when we reach the mid of the array; that means no more swaps are pending.
Code:
#include <stdio.h> void reverse(char str[], int index, int size) { char temp; temp = str[index]; str[index] = str[size - index]; str[size - index] = temp; if (index == size / 2) { return; } reverse(str, index + 1, size); } int main() { int size = 100, bytes_read, length; char *string; printf("Enter some text of your choice: "); string = (char *) malloc (size); bytes_read = getline (&string, &size, stdin); length = bytes_read - 1; reverse(string, 0, (length - 1)); printf("The string after reversing is: %s\n", string); return 0; }
Output:
Enter some text of your choice: Hello! Morning ! The string after reversing is: ! gninroM !olleH
Approach 4: Using Pointers:
- The logic is same as used above; however we do the same with pointers and without recursion.
- What we do is, we have a pointer ‘start’ point to the start of the array and ‘end’point to the end of the array.
- We traverse till the mid of the string and keep swapping the start and end characters using temp character variable.
Code:
#include <stdio.h> void reverse(char *str,int length) { int i; char *start, *end, temp; start = str; //pointer to beginning of string end = str; //pointer to end of string for (i = 0; i < length - 1; i++) end++; for (i = 0; i < length/2; i++) { temp = *end; *end = *start; *start = temp; start++; end--; } } int main() { int size = 100, bytes_read, length; char *string; printf("Enter some text of your choice: "); string = (char *) malloc (size); bytes_read = getline (&string, &size, stdin); length = bytes_read - 1; reverse(string, (length - 1)); printf("The string after reversing is: %s\n", string); return 0; }
Output:
Enter some text of your choice: Found You ! The string after reversing is: uoY dnuoF!
Report Error/ Suggestion