V1.0程序:
使用库函数strlen
#include<stdio.h>
#include<string.h>
void reverse_string(char arr[])
{
int left = 0;
int right = strlen(arr) - 1;
int i = 0;
while (left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
for (i = 0; i < strlen(arr); i++)
{
printf("%c",arr[i]);
}
}
int main()
{
char arr[] = "abcdf";
reverse_string(arr);
return 0;
}
V2.0程序:
不使用库函数strlen
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char arr[])
{
int left = 0;
int right = my_strlen(arr) - 1;
int i = 0;
while (left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
for (i = 0; i < my_strlen(arr); i++)
{
printf("%c",arr[i]);
}
}
int main()
{
char arr[] = "abcdf";
reverse_string(arr);
return 0;
}
V3.0程序:
不使用库函数strlen,递归实现
思路:大事化小
reverse_string("a b c d e f ")
1.a和f的交换
2.逆序reverse_string(“b c d e”)
a b c d e f \0
a b c d e f \0 提出a
f b c d e f \0 a
f b c d e \0\0 a
f 逆序b c d e \0 \0 再把a放到第二个\0位置
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char arr[])//char* arr也是一样的
{
char tmp = arr[0];
int len = my_strlen(arr);
arr[0] = arr[len - 1];
arr[len - 1] = '\0';
if (my_strlen(arr + 1) >= 2)
{
reverse_string(arr + 1);
}
arr[len - 1] = tmp;
}
int main()
{
int i = 0;
char arr[] = "abcdf";
reverse_string(arr);
for (i = 0; i < my_strlen(arr); i++)
{
printf("%c", arr[i]);
}
return 0;
}