void reverse_char(char str[])///非递归
{
char tmp;
int left = 0;
int right = my_strlen(str) - 1;
while (left < right)
{
tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
}
int my_strlen(char str[])
{
if (*str != '\0')
{
return my_strlen(str+1) + 1;
}
else
{
return 0;
}
}
int main()
{
int z;
char arr[] = { "abcde" };
reverse_char(arr);
z = my_strlen(arr);
printf("%d\n", z);
printf("%s", arr);
return 0;
}
非递归写法。
递归+指针写法
int my_strlen(char*);
void reverse_char(char str[],int len)///递归
{
char tmp;
if (my_strlen(str) >= 2)
{
tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = '\0';
reverse_char(str + 1,len-2);
*(str + len - 1) = tmp;
}
}
int my_strlen(char str[])
{
if (*str != '\0')
{
return my_strlen(str+1) + 1;
}
else
{
return 0;
}
}
int main()
{
int len;
char arr[] = { "abcde" };
len = my_strlen(arr);
reverse_char(arr, len);
printf("%d\n", len);
printf("%s", arr);
return 0;
}
此题用非递归会简单些许。