编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
逆序之后数组的内容变成:fedcba
递归版本
int my_strlen(char* s)
{
int count = 0;
while(*s!='\0')
{
count++;
s++;
}
return count;
}
void reverse_string(char* arr)
{
int len = my_strlen(arr);
char tmp = *arr;
*arr = *(arr + len - 1);
*(arr + len - 1) = '\0';
if (my_strlen(arr + 1) > 1)
reverse_string(arr + 1);
*(arr + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdefg";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
参数用指针的形式
int my_strlen(char* s)
{
int count = 0;
while(*s!='\0')
{
count++;
s++;
}
return count;
}
void reverse_string(char* str)
{
char* left = str;
char* right = str + my_strlen(str) - 1;
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;right--;
}
}
int main()
{
char arr[] = "abcdefg";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
参数是数组的形式
int my_strlen(char* s)
{
int count = 0;
while(*s!='\0')
{
count++;
s++;
}
return count;
}
void reverse_string(char arr[])
{
int left = 0;
int right = my_strlen(arr) - 1;
//交换
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdefg";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}