Given a string, reverse the string but not the special characters in the string

Consider an input string and reverse the alphabets in the string except the special characters in the string and print the string.

For example: 


Consider the input string, s@t#!sh


The expected output is , h@s#!ts


As you can see, the special characters are in place without any change, whereas the alphabets in the string are reversed.


Input:

s@t#!sh

Output:

h@s#!ts

C Implementation:

Solution 1:

#include <stdio.h>
#include <string.h>

int main(void) {
 // to reverse a string
 char str[10000];
 char temp;
 int i = 0;
 int j;
 scanf("%s",str); // str = "sathish"
 j = strlen(str)-1;
 // h s i h t a s \0
 // 0 1 2 3 4 5 6 7
 while(i<j)
 {
  while(i<j && !(str[i]>='a' && str[i]<='z'))
   i++;
  while(i<j && !(str[j]>='a' && str[j]<='z'))
   j--;
  temp = str[i];
  str[i] = str[j];
  str[j] = temp;
  i++,j--;
 }
 printf("%s",str);
 return 0;
}

Solution 2:

#include <stdio.h>
#include <string.h>
int main()
{
 char str[10000];
 int i,j;
 char temp;
 i = 0;
 scanf("%s",str);
 j = strlen(str)-1;
 while(i<j)
 {
  if((str[i]>='a' && str[i]<='z') && (str[j]>='a' && str[j]<='z'))
  {
   temp = str[i];
   str[i] = str[j];
   str[j] = temp;
   i++,j--;
  }
  else
  {
   if(str[i]>='a' && str[i]<='z')
    j--; 
   else
    i++;
  }
 }
 printf("%s",str);
 return 0;
}