编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中
的字符串操作函数
方法1:递归
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int my_strlen(const char *p)
{
return assert(p), !(*p) ? 0 : (1 + my_strlen(p + 1));
}
void reverse_string(char *p)
{
if (*p == '\0')
;
else
{
char tmp = p[0];
int len = my_strlen(p);
p[0] = p[len - 1];
p[len - 1] = '\0';
reverse_string(p + 1);
p[len - 1] = tmp;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("arr=%s \n",arr);
system("pause");
return 0;
}
方法2:非递归
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void swap(char *left, char *right)
{
assert(left != NULL);
assert(right != NULL);
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int my_strlen(const char *p)
{
return assert(p), !(*p) ? 0 : (1 + my_strlen(p + 1));
}
char *reverse_string(char * string)
{
char *p = string;
int len = my_strlen(string);
swap(string, string + len - 1);
return p;
}
int main()
{
char arr[] = "abcdef";
printf("%s\n", reverse_string(arr));
system("pause");
return 0;
}