【C语言】字符串逆序与三步翻转法(倒置字符串)

您所在的位置:网站首页 c语言数据的输入输出小结 【C语言】字符串逆序与三步翻转法(倒置字符串)

【C语言】字符串逆序与三步翻转法(倒置字符串)

2023-07-02 08:14| 来源: 网络整理| 查看: 265

前言 🎈大家好,我是何小侠🎈 🍃大家可以叫我**小何或者小侠🍃** 💐希望能通过写博客加深自己对于学习内容的理解💐 🌸也能帮助更多人理解和学习🌸

《小松》 杜荀鹤 自小刺头深草里,而今渐觉出蓬蒿。 时人不识凌云木, 直待凌云始道高。

在这里插入图片描述

这篇博客我们一起来简单的了解一下,C语言中经典的例题和方法——逆序字符串和三步翻转法,希望大家能有所收获。

在这里插入图片描述

目录 题目与思路🍊倒置字符串题目🍊思路🍊代码和讲解🍊总结🍊

题目与思路🍊

在这里插入图片描述 这是原链接: link

在这里插入图片描述 其实我们只需要用两个指针分别指向字符最前端和最后端就行,然后创建一个临时变量用作交换的变量,每次交换后指针移动就行了。 在这里插入图片描述 我们只需要交换一次后,left++一次,right–就行,但是如何找到字符’ t '呢? 我们知道strlen函数,可以求\0之前的字符个数,可以利用这一点来确定right指针的位置。

下面我们给出代码

void reverse(char* str) { int len = strlen(str); char* left = str; char* right = str + len - 1; while (left char arr[101] = "I am a student"; reverse(arr); printf("%s", arr); //char arr[101] = {0}; 多组输入版本 //while (fgets(arr, 101, stdin)!=EOF) //{ // reverse(arr); // printf("%s\n", arr); // memset(arr, '0', 101); //} return 0; }

这里我们也给出多组输入版本,fgets也可以用来代替gets or gets_s, 其实在最后的memset没有太大的作用,不要也可以,因为fgets会直接改变数组的内容,但是加上更好~

但是实际上我们具体说的重点不在这里。

倒置字符串题目🍊

先看题目 在这里插入图片描述

思路🍊

在这里插入图片描述 思路虽然简单,但是实现起来还是有区别的,实现时也需要一些细节。

代码和讲解🍊

下面的代码也被称为三步翻转法

#include void reverse(char* str1,char * str2) { char* left = str1; char* right = str2; while (left reverse(arr, arr + strlen(arr)-1); char* str1 = arr; char* str2 = arr; while (* str2 != '\0') { while (*str2 != ' ' && *str2 != '\0') { str2++; } char* cur = str2 - 1; reverse(str1, cur); if (*str2 != '\0') { str2++; } str1 = str2; } } int main() { //char arr[] = "I like beijing."; char arr[100] = { 0 }; //scanf("%[^\n]", arr); gets_s(arr, 100);//注意最高输入99个字符,最后一个字符gets_s会补\0 inverted_str(arr); printf("%s", arr); }

那我们就来仔细讲解一下这段代码中的细节,首先 我们知道scanf是不能用来输入字符串的,但是如果你采用这种写法,scanf就会在\n之前停下来,

还有如果gets无法使用时gets_s使用的细节,gets_s会补\0在输入的字符串后,所以我们要注意输入的字符长度不要超过gets_s的参数的数字。 主要还是讲解 inverted_str(arr) 倒置字符串这个函数, 在一开始我们就需要逆序一下字符串,

然后我们用两个指针来接收,我们的思路是用str2这个指针来判断空格, 然当str2指针在第二个while循环停下时,指向的就是space,但是我们的reverse 函数需要传两个参数,那么要让str2函数退后一步吗? 不!我们直接用一个cur指针来接收str2-1的值,也就是指向space的前一个字符 再输入合适的参数就行, 但是在我们让str2++的过程中最后会遇到\0所以我们需要多加一个 限制条件在第二个while的条件判断中。 再来看reverse一个单词该怎么办,肯定需要从space的下一个字符开始 所以我们让还在指向space的str2++,但是这个str2还是有条件,当到字符串最后的时候 str2肯定就会指向\0,所以我们也要加限制条件,不然就会越界访问,形成野指针。 当str2指向spaceh后面一个字符时str1也需要被赋值成str2的地址这样才算又重新开始

总结🍊

这篇博客我们介绍了字符串逆序和三步翻转法,但是我们还介绍了很多细节,比如fgets用来多组输入,scanf用来接收字符串的奇葩方式,gets_s在使用的时候的细节。 在这里插入图片描述

最后如果这篇博客有帮助到你,欢迎点赞关注加收藏

在这里插入图片描述在这里插入图片描述 如果本文有任何错误或者有疑点欢迎在评论区评论 在这里插入图片描述

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3