小题分享:
定义一个字符串"abcdef",封装一个函数使他反向排列(不是逆序打印)。
我们很容易就能想到一种方法:采用循环的方式互换首尾的元素
//
void reverse(char* str)
{
int left = 0;
int right = strlen(str) - 1;
while (left < right)
{
char tmp = *(str + left);
*(str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
那我们加大点儿难度,想想用递归的方式如何解
采用下方的代码就可以很好的解决了
//
void reverse(char* str)
{
static int flag = 1;
int count = strlen(str);
char tmp = 0;
if(count >flag)
{
tmp = *str;
*str = *(str + count - flag);
*(str + count - flag) = tmp;
flag++;
reverse(++str);
}
}
除了上图的方法我们再介绍一种
//
void reverse(char* str)
{
int count = strlen(str);
char tmp = 0;
tmp = *str;
*str = *(str + count - 1);
*(str + count - 1) = '\0';
if (strlen(str) >= 2)
reverse(str + 1);
*(str + count - 1) = tmp;
}
如果我们再加大难度题目中不可以使用库函数中提供的有关字符串的函数,此时我们可以自己写一个my-strlen()函数来代替库函数。
这里留给大家思考吧。
如果此文有不妥之处,请大家评论区讨论,谢谢。