得到的效果如下:
第一种方法,无任何限制:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
//int sz=sizeof(arr)/sizeof(arr[0]);
int left=0;
int right = strlen(arr) - 1;//int right = sz - 2;
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
printf("%s\n", arr);
return 0;
第二种方法,要求运用函数:
#include<stdio.h>
#include<string.h>
void reverse(char arr[])
{
int left=0;
int right = strlen(arr) - 1;//int right = sz - 2;
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
//int sz=sizeof(arr)/sizeof(arr[0]);
reverse(arr);
printf("%s\n", arr);
return 0;
}
第三种方法,要求运用递归:
#include<stdio.h>
#include<string.h>
void reverse(char* str)
{
char tmp=*str;
int len = strlen(str);
*str=*(str + len - 1);
*(str + len - 1)='\0';
if(strlen(str+1)>=2)
reverse(str + 1);
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
reverse(arr);
printf("%s\n", arr);
return 0;
}
第四种方法,要求递归+自定义函数:
#include<stdio.h>
#include<string.h>
int my_strlen(char* str)
{
int count=0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char* str)
{
char tmp=*str;
int len = my_strlen(str);
*str=*(str + len - 1);
*(str + len - 1)='\0';
if(strlen(str+1)>=2)
reverse(str + 1);
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
reverse(arr);
printf("%s\n", arr);
return 0;
}
最后一种,简单易懂,不用指针:
#include<stdio.h>
#include<string.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char arr[],int left,int right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
if(left<right)
reverse(arr, left+1, right-1);
}
int main()
{
char arr[] = "abcdef";//[a b c d e f \0]
int left = 0;
int right = my_strlen(arr)-1;
reverse(arr,left,right);
printf("%s\n", arr);
return 0;
}