C Program: Reverse a String

A reversed string has its characters re-ordered from the original string, starting from the last to the first. If the input string is "hello", the program should reverse it and print out "olleh".

For some versions of C, there already exist a built-in function called strrev() for the purpose, available under the <string.h> header library. The input string needs to be passed as an argument to it; which then reverses it.

The below program illustrates the use of the strrev() function to reverse a given string. Note the use of %[^\n] inside the scanf() function for reading the string. The difference is, with %s, the reading goes off with the encounter of first space/blank character, while %[^\n] accepts the spaces.

				
				#include <stdio.h>
				#include <string.h>
				int main() {
					char str[100];
					printf("Enter a string: ");
					scanf("%[^\n]", str);
					strrev(str);
					printf("The reverse of the entered string is %s \n", str);
					return 0;
				}
				
			

The strrev() function, however, is not available for some versions of C, like the C99.

Reversing a String Without strrev()

We can achieve the same without using the strrev() function. In the below program, two variables of type charstr[] & revstr[] — are declared to hold the input string and the reversed string respectively. The end variable counts the number of characters of the given string, but is decremented with each character assignment inside the second while loop.

					
					#include <stdio.h>
					int main() {
						char str[100], revstr[100];
						unsigned short start = 0, end = 0;
						printf("Enter a string: ");
						scanf("%[^\n]", str);
						// count the number of characters
						while (str[end] != '\0')
							end++;
						// backward assignment, starting from the last character
						while (end > 0) {
							revstr[start] = str[end-1];
							end--;
							start++;
						}
						revstr[start] = '\0';
						printf("The reversed string is: %s", revstr);
						return 0;
					}