Reverse an array without affecting special characters - GeeksforGeeks
Given a string, that contains special character together with alphabets ('a' to 'z' and 'A' to 'Z'), reverse the string in a way that special characters are not affected.
Read full article from Reverse an array without affecting special characters - GeeksforGeeks
Given a string, that contains special character together with alphabets ('a' to 'z' and 'A' to 'Z'), reverse the string in a way that special characters are not affected.
Input: str = "a,b$c" Output: str = "c,b$a" Note that $ and , are not moved anywhere. Only subsequence "abc" is reversed
Simple Solution:
1) Create a temporary character array say temp[].
2) Copy alphabetic characters from given array to temp[].
3) Reverse temp[] using standard string reversal algorithm.
4) Now traverse input string and temp in a single loop. Wherever there is alphabetic character is input string, replace it with current character of temp[].
1) Create a temporary character array say temp[].
2) Copy alphabetic characters from given array to temp[].
3) Reverse temp[] using standard string reversal algorithm.
4) Now traverse input string and temp in a single loop. Wherever there is alphabetic character is input string, replace it with current character of temp[].
Efficient Solution:
1) Let input string be 'str[]' and length of string be 'n' 2) l = 0, r = n-1 3) While l is smaller than r, do following a) If str[l] is not an alphabetic character, do l++ b) Else If str[r] is not an alphabetic character, do r-- c) Else swap str[l] and str[r]
void
reverse(
char
str[])
{
// Initialize left and right pointers
int
r =
strlen
(str) - 1, l = 0;
// Traverse string from both ends until
// 'l' and 'r'
while
(l < r)
{
// Ignore special characters
if
(!isAlphabet(str[l]))
l++;
else
if
(!isAlphabet(str[r]))
r--;
else
// Both str[l] and str[r] are not spacial
{
swap(str[l], str[r]);
l++;
r--;
}
}
}