博客主页:Luo-Kuang-何
座右铭:一起走向人生巅峰的路上
学习进度:【C语言】
博客声明:我将尽我所能,用心写好每一份博客,让更多小伙伴能够与我交流学习心得。
如有不足,请指正。学习就是在不断犯错并改正的过程!
这里我就简单讲解一下我做这题的一些思路和方法。
思路:因为我想的是每次把最后面的字符放到最前面来,当时没想到2边同时交换往中间靠拢的方法,能力不够。回归正题,我把除第一个已经完成逆序的arr[0],后面都把字符往后移,会空出arr[1],这时我把用第三方arr1存储的arr[0]原来的值放入,就从arr[1]到最后一位形成一个新的排序,只是最后面那个字符已经逆序。这时我用新指针指向arr[1],就可以依次逆序一个字符,最终完成所以逆序。
过程有点复杂,且要递归次数相对较多,但确实是我第一次做这种题能想到的思路最简化了。
这里我是把arr[0]放到第三方arr1里存放,等下要赋值给arr[1]。
把最后面字符赋值给第一个arr[0]。
这里可以看出,我通过交换后移,把 a b c d \n 顺序通过指针改成了 d a b c \n
这时我把指针后移,指针就从指向arr[0]改成指向arr[1],依次递归下去,也依次逆序一个字符。
最后当指针指向\n时,说明没有字符需要逆序了,完成递归,终止。
void reverse_string(char* string)
{
char arr1 = 0;
int i = 0;
if (*string == '\n'); //判断第1个字符是否为’\n',是则停止递归
else
{
for (i = 0; *(string + i+1) != '\0'; i++); //计算新指针到'\0'的长度是i+1
arr1 = *string; //先把新指针指向第一个地址里的数提*string出来放到arr1里
*string = *(string + i); //把最后面的数*(string + i)放在指向的第一个地址*string里
for (; i > 1; i--) //从新指针第二个数到第i+1依次往后移
{
*(string + i) = *(string + i - 1);
}
*(string + i) = arr1; //把arr1里数赋值给第二个数
reverse_string((string + 1)); //否则把(string+1)地址给新string指针
}
}
这里我用if判断到终点没,注意我写的是if();这后面;表示如果成立我什么都不做。终止。
我用了一个for(也写了;)语句计算出指针指向到\n的距离得出字符剩余数量为i+1个。
成功完成第一个逆序后,用for从第二个开始往后移,再把第二个存上原来第一个的字符。
最后指针后移。
我的思路可能有点复杂,仅供各位参考,希望你们能想出更简单的方法实现。
各位小伙伴们,觉得有用就给波三连呗!如有错误,请指正,谢谢大家!如果大家有不同意见,请与我交流,一起进步
我们顶峰相见!!!️