给你一个字符串 s
,根据下述规则反转字符串:
- 所有非英文字母保留在原有位置。
- 所有英文字母(小写或大写)位置反转。
返回反转后的 s
。
这个更简单了,我们只需在反转时判断两边是不是字母,是的话就反转,不是就不反转。让我们直接开写。创建一个left和right,分别表示字符串的最左边和最右边,然后我们就判断最左边是不是字母,不是的话就让他前进一个,是的话就判断right,同理也一样,如果它们都为字母,那么就让它们交换,交换后就让left--right++,重复此过程,直到交换掉所有的字母,而到left>=right时就交换了所有的字母。
int my_isalpha(s)//有判断是否字母的库函数,可以直接调用。
{
if ((s >= 'a' && s <= 'z') || (s >= 'A' && s <= 'Z'))
return 1;
return 0;
}
char* reverseOnlyLetters(char* s) {
int len = strlen(s);
int left = 0;
int right = len - 1;
while (left < right)
{
if (my_isalpha(s[left])==0)
{
left++;
continue;
}
if (my_isalpha(s[right]) == 0)
{
right--;
continue;
}
if (left < right)
{
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
return s;
}