方法一:通过开辟与源字符串一样大小的内存实现反转
#include <stdio.h>
#include <string.h>
void test01()
{
int count = 0;
char src[] = "hello,world";
char *dest = NULL;
int len = strlen(src);
dest = (char*)malloc(len *sizeof(char));
memset(dest, 0, sizeof(len*sizeof(char)));
char *d = dest;
//char *s = src + len - 1;
char *s = (char*)(&src + 1) - 2 ; //上面注视的代码也可以实现功能,这里的代码也可以用
//这里为什么要减2,因为字符数组的最后一个元素为'\0',所以要多减1
while (len-- != 0)
{
*d++ = *s--;
}
*d = '\0';
printf("%s\n", dest);
}
int main(void)
{
test01();
system("pause");
return 0;
}
上面一种方法需要额外的内存,若源字符串太长,则导致空间复杂度大
方法二:不需要额外开辟内存
#include <stdio.h>
void Flip(char*array, int len) {
int left = 0;
int right = len;
while (left <= right) {
char tmp = array[left];//数组内容进行翻转
array[left] = array[right];
array[right] = tmp;
left++;//对循环条件进行调整
right--;//对循环条件进行调整
}
}
int main() {
char array[] = "hello world";
int len = strlen(array) - 1;//取长度注意是取下标最后一位
Flip(array, len);
for (int i = 0; i <= len; ++i) {
printf("%c", array[i]);
}
printf("\n");
system("pause");
return 0;
}