C语言|C语言实现——字符串逆序

目录
前言
如何实现
代码实现
1.设立一个数组存放输入的字符串
2.将输入的字符串整体逆序
2.1 计算字符串长度
2.2 使用函数来实现倒置
2.3 实现函数reverse
3.将其中每个单词再进行逆序
3.1 整个语句如何结束循环
3.2 每个单词的结束位置
3.3 内部实现
3.4 判断语句结束,从而停止逆序
代码汇总
结语

前言 如何将一串含有多个单词的字符串逆序,并且每个单词及标点符号不逆序输出呢,下面我们一起来实现一下吧。
示例:
输入下列字符:

I like beijing.
输出结果:
beijing. like I
如何实现 实现的思路如下:
1.设立一个数组存放输入的字符串
2.将输入的字符串整体逆序
.gnijieb ekil I
3.将其中每个单词再进行逆序
beijing. like I
代码实现 1.设立一个数组存放输入的字符串
#include int main() { char arr[100] = { 0 }; gets(arr); //注意没有使用scanf,因为scanf遇到空格就会停止接收输入的内容printf("%s\n",arr); return 0; }

2.将输入的字符串整体逆序 需要整体逆序字符串,就需要一个函数来实现,且需要给函数传递两个参数:第一个元素和最后一个元素,而求这两个元素需要首元素地址并计算一下数组内字符串的长度。
2.1 计算字符串长度
int len = strlen(arr);

2.2 使用函数来实现倒置
reverse(arr,arr+len-1);

2.3 实现函数reverse
void reverse(char* left,char* right) { while(left < right)//只有当左边的地址小于右边的地址时,才交换,中间的不需要交换 { char tmp = 0; //定义并初始化一个中间值 tmp = *left; //开始交换 *left = *right; *right = tmp; left++; right--; } }

此时整体代码如下
void reverse(char* left, char* right) { while (left

我们输入 I like beijing. 试试
C语言|C语言实现——字符串逆序
文章图片

3.将其中每个单词再进行逆序 这时我们需要将其中每个单词再进行逆序,这样才能达到我们需要的效果。
这其中需要注意几点:
1.整个语句如何结束循环
2.每个单词的起始位置和结束位置
3.内部如何实现
4.怎样才能判断语句结束,从而停止逆序
3.1 整个语句如何结束循环
我们可以定义一个起始位置,当这个位置的地址等于 '\0' 时,那么就相当于语句结束了。
char* start = arr; while(*start != '\0') {}

3.2 每个单词的结束位置
当遇到空格或者 '\0' 时,某一单词就结束了
我们可以首元素的地址赋给一个新的指针,只要这个指针指向的不是空格且不是 '\0' ,我们就让他往后挪一位,这样一个单词就找到了
char* start = arr; while(*start != '\0') { char* end = start; while(*end != ' ' && *end != '\0') { end++; } }

3.3 内部实现
此时只要利用之前定义的函数来交换这个单词的每个字符,就可以完成一个单词的逆序
char* start = arr; while(*start != '\0') { char* end = start; while(*end != ' ' && *end != '\0')//一个单词的结束位置 { end++; } reverse(start, end - 1); }

3.4 判断语句结束,从而停止逆序
接下来我们需要进行下一个单词的逆序,此时首元素的地址就需要之前的尾元素的地址再加1,那么如果整个语句结束了,此时还需要判断是否需要进行下一次逆序。
char* start = arr; while(*start != '\0') { char* end = start; while(*end != ' ' && *end != '\0')//一个单词的结束位置 { end++; } reverse(start, end - 1); if(*end != '\0')//还有下一个单词 start = end + 1; else//末尾为'\0' 语句结束 start = end; //跳出循环 }

代码汇总
#include #include //输入 I like beijing. //输出 beijing. like I void reverse(char* left, char* right) { while (left

结语 此时我们的程序就完成啦,让我们来运行一下试试吧!
输入I like beijing.
C语言|C语言实现——字符串逆序
文章图片

大功告成!
此时我们可以思考一下这种方法的衍生版本,
比如在某种原因下,我们将一串字符每个单词的顺序弄颠倒了,我们需要重新进行排序,此时如何不变动标点符号来逆序?
如何替换特定单词的顺序,比如想把 I beijing like.变为正常的 I like beijing.又需要进行哪些操作呢?
如果大家有更好的方法或者想法,欢迎大家在评论区留言讨论哦~
【C语言|C语言实现——字符串逆序】由于本人能力有限,若有错误,希望指正!!!

    推荐阅读