编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string
#include <stdio.h>
/**
输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
简单的交换
*/
void reverseString_1(char* s, int sSize)
{
int i =0;
int tail = sSize-1;
char temp;
while(i+1 <= sSize/2 )
{
temp = s[i];
s[i] = s[tail-i];
s[tail-i] = temp;
i++;
}
///当时纠结奇数与偶数项需要分别处理,后来手动演算,发现不需要如此操作,对于奇数项中间项被直接空留
}
void reverseString(char* s, int sSize)
{
char * start = s;
char * tail = s +sSize -1;
char temp;
while(start <tail){
temp = *start;
*start = *tail;
*tail = temp;
start++;
tail--;
}
}
int main(void)
{
char arr[5]= {'h','e','l','y','o'};
reverseString_1(arr, 5);
for(int j =0; j<5; ++j)
{
printf("%c\n",arr[j]);
}
return 0;
}