一、逆序字符串
非函数方法
#include<stdio.h>
int main()
{
char arr[] = "abcdef";
int sz = sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = sz-2;//注意这里的-2,这行代码也可写为int tight = strlen(arr)-1;注意加头文件<string.h>
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;
while(left<right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse(arr);
printf("%s\n",arr);
return 0;
}
递归方法
#include<stdio.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(my_strlen(str+1)>=2)
reverse(str+1);
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abdcdefg";
reverse(arr);
printf("%s\n",arr);
return 0;
}
另:多参数
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while(*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char arr[],int left,int right)
{
if(left<right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
reverse(arr,left+1,right-1);
}
}
int main()
{
char arr[] = "abcdef";
int left = 0;
int right = my_strlen(arr)-1;
reverse(arr,left,right);
printf("%s",arr);
return 0;
}