逆序字符串
编写一个函数 reverse_string(char* string)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
示例:"abcdef" 逆序后: "fedcba"
方法一:非递归
思路:"abcdef\0", 将a与f交换,再将b和e交换,重复此步骤。
定义一个left指向第一个字符,定义一个right指向最后一个字符,将left位置的字符和right位置的字符交换。然后left++, right--
方法一:非递归法
int my_strlen(char* str)
{
//计数法
/*int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;*/
//递归法
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
void reverse_string(char str[], int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)
{
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdefg";
int sz = my_strlen(arr);
reverse_string(arr, sz);
printf("%s\n", arr);
return 0;
}
方法二:递归法
思路:图示
方法二:递归法
int my_strlen(char* str)
{
//计数法
/*int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;*/
//递归法
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
void my_reverse(char* str)
{
int sz = my_strlen(str);
char tmp = 0;
tmp = *str;
*str = *(str + sz - 1);
*(str + sz - 1) = '\0';
if (my_strlen(str+1) >= 2)
{
my_reverse(str + 1);
}
*(str + sz - 1) = tmp;
}
int main()
{
char arr[] = "abcdefg";
int sz = my_strlen(arr);
my_reverse(arr);
printf("%s\n", arr);
return 0;
}