- 非递归的方法
字符串到底怎么逆置呢?刚看到时,我也是很懵。仔细想想,不就是第一个字符和最后一个字符进行交换吗?然后是第二个字符和倒数第二字符交换吗?依此类推,就知道怎么写啦~交换会吧、加加减减也是会的吧。代码就出来了。
- 参考代码
void reverse_string(char* str)
{
int len = strlen(str);
char* left = str;
char* right = str + len - 1;//拿到最后字符的地址
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s", arr);
return 0;
}
- 递归的方法
如何利用递归来实现呢?其实和上述的思路是一样的。我们可以先逆转第一个字符和最后一个,在处理剩下的字符串。reverse_string(“abcdef”)->freverse_string(“bcdef”)a…
- 参考代码
void reverse_string(char* str)
{
int len = strlen(str);
char tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = ' ';//改成 之后,后面的字符串就是bcde 了
if(strlen(str+1)>=2)//递归的条件,只有一个时就不用递归了
reverse_string(str + 1);
*(str + len - 1) = tmp;//函数栈帧,我开始忘了,理解但是写不出来
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s", arr);
return 0;
}
不推荐用递归的方法



