目录

前言

如何实现

代码实现

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 <stdio.h>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<right){char tmp = 0;tmp = *left;*left = *right;*right = tmp;left++;right--;}
}int main()
{char arr[100] = { 0 };gets(arr);//获取字符串//将字符串倒置int len = strlen(arr);//计算字符串长度,以求最后一位的地址reverse(arr, arr+len-1);//进行倒置printf("%s\n",arr);return 0;
}

我们输入 I like beijing. 试试

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 <stdio.h>
#include <string.h>//输入 I like beijing.
//输出 beijing. like I
void reverse(char* left, char* right)
{while (left<right){char tmp = 0;tmp = *left;*left = *right;*right = tmp;left++;right--;}
}int main()
{char arr[100] = { 0 };gets(arr);//获取字符串//将字符串倒置int len = strlen(arr);//计算字符串长度,以求最后一位的地址reverse(arr, arr+len-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;elsestart = end;}printf("%s\n", arr);return 0;
}

结语

此时我们的程序就完成啦,让我们来运行一下试试吧!

输入I like beijing.

大功告成!

此时我们可以思考一下这种方法的衍生版本,

比如在某种原因下,我们将一串字符每个单词的顺序弄颠倒了,我们需要重新进行排序,此时如何不变动标点符号来逆序?

如何替换特定单词的顺序,比如想把 I beijing like.变为正常的 I like beijing.又需要进行哪些操作呢?

如果大家有更好的方法或者想法,欢迎大家在评论区留言讨论哦~

由于本人能力有限,若有错误,希望指正!!!

C语言实现——字符串逆序相关推荐

  1. c语言对字符串逆序,【C语言】 字符串逆序

    [C语言] 字符串逆序 字符串逆序有多种办法,下面我们分方法而论: // 非递归实现字符串反转: char *reverse(char *str) { if( !str ) { return NULL ...

  2. 使用C语言实现字符串逆序操作

    这篇文章主要介绍了使用C语言实现字符串逆序操作案例,本文包含使用C语言的两种方法去实现,递归和非递归,以下就是详细内容,需要的朋友可以参考下 编写一个函数 reverse_string(char * ...

  3. c语言指针字符串逆序存放,C语言指针实现字符串的反转

    题目要求: 编写程序:从键盘任意输入一个字符串,输出该字符串. 然后,将该字符串逆序存放后再输出,要求用字符指针完成. 代码: //解法一 #include #include int main() { ...

  4. c语言实现单链表逆序算法,C语言解字符串逆序和单向链表逆序问题的代码示例...

    字符串逆序上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { ...

  5. C语言/关于字符串逆序存储

    关于字符串逆序存储问题,本文主要介绍了两种方法:1.递归 2.非递归 递归: 先利用my_strlen()函数求出所求字符串长度,字符串长度保存在变量len中(不含字符串'\0')(也可以直接使用库函 ...

  6. C语言实现字符串逆序、倒置字符串(字符串逆序问题的升级)

    一.字符串逆序 问题描述: 输入一个字符串str,将其内容颠倒过来,并输出. 数据范围0<len(str)<10000 输入描述: 输入一个字符串,可以有空格 输出描述: 输出逆序的字符串 ...

  7. c++语言将字符串逆序输出,C++实现字符串删除字符后逆序输出

    本文实例为大家分享了C++实现字符串删除字符后逆序输出的具体代码,供大家参考,具体内容如下 输入若干个字符串,和一个英文字符ch. 要求删除每个字符串中的字符ch(区分大小写),得到新的字符串,然后将 ...

  8. 【c语言】字符串逆序

    输入一个字符串,长度在100以内,按相反次序输出其中的所有字符. 样例输入 tsinghua 样例输出 auhgnist #include <stdio.h> #include <s ...

  9. C语言简单递归实现字符串逆序输出

    题目内容的 "注意" 已经侧面规定了要用递归来实现: 输入是一个可能含有空格的串说明要用gets来读入字符串,如果利用scanf的话是无法读入一段含有空格的串. 下面先上一般方法: ...

最新文章

  1. deepin下载软件慢切换镜像
  2. python实现AES算法
  3. new date.gettime 与传入时间相差毫秒数不对_给女票解释为什么日本时间比中国时间快一个小时?...
  4. 2018.11.09 codeforces487E. Tourists(tarjan+树链剖分)
  5. java链表交集并集,一个链表求集合并集交集的异常
  6. python查找最长公共前缀_Python实现查找字符串数组最长公共前缀示例
  7. Chrome指令/追踪Http请求相关
  8. mysql读出来的日期后面多了个 .0处理及layui中日期控件点击一闪而过处理
  9. VK Cup 2016 - Round 1 (Div. 2 Edition) A. Bear and Reverse Radewoosh 水题
  10. EMC测试仪器_智芯文库 | 单片机系统EMC测试和故障排除
  11. solaris 10 虚拟机下安装双机
  12. 远程主机强迫关闭了一个现有的连接。_紧急 | 微软远程桌面服务高危漏洞(CVE-2019-0708)预警!...
  13. SSCOM下载及无法打开问题解决
  14. 十大算法(动图讲解)❤️超详细!
  15. matlab逆变器原理,MATLAB中的单相全桥逆变器电路建模与仿真
  16. win7桌面计算机丢失,W7电脑系统msvcp120.dll丢失的解决方法
  17. 苹果cms10好看的模板自适应高端大气免费模板
  18. 电商api接口:淘宝以图搜图
  19. 01背包中背包装满和不装满
  20. 配置photon服务器,unity连接Photon

热门文章

  1. 微信小程序使用腾讯地图完整流程
  2. openresty 代理springboot应用
  3. 汇编的jl、jg与jb、ja
  4. 2016跨境电商五大物流模式盘点
  5. 神经网络的优化算法框架
  6. Linux磁盘与文件系统管理学习笔记
  7. 惊绝在世音乐《道禅》(典藏级)
  8. python——金融商品收益率GARCH 模型构建(GARCH 模型)
  9. scrollTop和offsetTop区别
  10. HTML5入门之有序列表