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