字符串逆序+单词逆序

文章目录

  • 字符串逆序+单词逆序
    • 一.字符串逆序
    • 二.单词逆序
    • 三、感谢以及交流

一.字符串逆序

问题描述:

输入一个字符串arr,将其内容颠倒过来,并输出。

数据范围0<len(arr)<10000

输入描述:

输入一个字符串,可以有空格

输出描述:

输出逆序之后的字符串

输入: abcdef
输出:fedcba
输入: I love BeiJing.
输出:.gniJieB evol I

方法一
利用循环的方式,将字符串进行逆序

#include<stdio.h>
#include<string.h>
void reverse(char *p,int len)
{char* q = p + len - 1;while (p < q)   //循环终止条件{*p ^= *q;      //利用位操作符,不创建变量*q ^= *p;*p ^= *q;p++;q--;}//while (p < q)//{//    char tmp = *p;//创建变量进行逆序// *p = *q;// *q = tmp;//    p++;//    q--;//}
}
int main(){char arr[20] = "0";scanf("%[^\n]", arr);int len = strlen(arr);reverse(arr,len);printf("%s", arr);return 0;
}

方法二

利用递归的方式,将字符串逆序

#include<stdio.h>
#include<string.h>
void reverse(char *p,int len)
{*p = *p ^ *(p + len - 1);*(p + len - 1) = *p ^ *(p + len - 1);*p= *p ^ *(p + len - 1);char ch=*(p + len - 1);*(p + len - 1) = '\0';if (strlen(p+1) > 1)   //如果之间的长度大于1的话,再次进行逆序reverse(p + 1, strlen(p+1));*(p + len - 1) = ch;
}
int main(){char arr[20] = "0";scanf("%[^\n]", arr);//     ^\n是直到遇到\n才停止,即为遇到回车之前int len = strlen(arr);reverse(arr,len);printf("%s", arr);return 0;
}

注意的是,要将每次逆序之后的较后一个元素先赋值为’\0‘,再然后将其原来的值赋值回去,避免递归出错

二.单词逆序

问题描述:

输入一个字符串arr,将其单词颠倒过来,并输出,要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只
允许出现一个空格间隔符

数据范围0<len(arr)<10000

输入描述:

输入一个字符串,可以有空格

输出描述:

输出逆序之后的单词

输入:abc def ghi
输出:ghi def abc

输入:I love Beijing.
输出:Beijing. love I

方法一
先上代码,接下来分析

#include<stdio.h>
#include<assert.h>
#include<string.h>
void reverse( char* p,  char* q)
{assert(p && q);         //判断是否为NULLwhile (p != q)//   while(p<q){char tmp = *p;*p = *q;*q = tmp;p++;q--;}
}
int main()
{char arr[10000] = "I love Beijing.";int len = strlen(arr);reverse(arr, arr+len-1);   //先将字符串进行整体逆序char* cur = arr;while (*cur){char* start = cur;while (*cur != ' '&&*cur)cur++;reverse(start, cur - 1);   //逆序单词//if(*cur==' ')cur++;}printf("%s\n", arr);return 0;
}

我们要想将单词逆序的话,我们可以先将字符串先进行整体逆序,然后我们可以发现,只要再次将每个空格之前的单词进行逆序操作就行

方法二
这个方法呢,和方法一类似,但是确实另外一种想法,从后面往前直到遇到空格
接下来看看代码

#include<stdio.h>
#include<string.h>
void reverse(char* p,int len)
{//I love Beijing.char* q = p + len - 1;while (*q)//进行外部循环{while (*q != '\0' && *q != ' ')//计数作用q--;q++;char* ch = q;while (*ch && *ch != ' ')//打印{if (*ch >= '0' && *ch <= '9' || *ch >= 'a' && *ch <= 'z' || *ch >= 'A' && *ch <= 'Z'||*ch=='.')    //避免出现错误printf("%c", *ch);ch++;}printf(" ");q -= 2;  //将q指向空格之前的地址}
}
int main()
{char arr[100] = "0";scanf("%[^\n]", arr);int len = strlen(arr);reverse(arr, len);return 0;
}

三、感谢以及交流

如果这一份字符串逆序+单词逆序的博客对你有所帮助的话,请给博主一个免费点赞,以示鼓励!!!

欢迎各位点赞,评论,收藏,一键三连哦,谢谢捧场!!!!
如果对博客有什么疑问或者不同的见解以及博客当中有什么错误的话,欢迎评论区留言!!!!!!!!!!

字符串逆序+单词逆序相关推荐

  1. 每天一道LeetCode-----以单词为单位逆序字符串,每个单词之间以一个空格分隔(原字符串中可能有多个空格)

    Reverse Words in a String 原题链接Reverse Words in a String 将字符串以单词为单位逆序,每个单词之间以一个空格间隔(原字符串中可能有多个空格) 逆序的 ...

  2. 按单词逆序句子(含标点)

    主要思想:先写出单词逆序的函数,再写整个句子逆序的函数(在其中查找单词,找到后调用单词逆序的函数逆序,最后将整个句子逆序). 程序缺点:只能识别几个常用的标点符号 源代码及测试程序: //给定一个字符 ...

  3. c语言案例——输入一个字符串,将其逆序输出

    字符串常量可以赋值给一个字符指针或者一个字符数组,比如:  /*1*/char *str = "this is a string"; /*2*/char str2[]= " ...

  4. C语言反序输出英文句子,C++实现英文句子中的单词逆序输出的方法

    本文实例讲述了C++实现英文句子中的单词逆序输出的方法.分享给大家供大家参考,具体如下: #include "stdafx.h" #include #include #includ ...

  5. 输入一个字符串,将其逆序输出。

    输入一个字符串,将其逆序输出. 输入提示信息:"Please Enter String1:\n" 输入字符串用gets() 输出提示信息和输出格式:"Result is: ...

  6. c语言字符串正序反序连接输出,C语言中字符串实现正序与逆序实例详解

    C语言中字符串实现逆序实例详解 字符串逆序和正序的实现代码: #include #include #include #include #include /*定义*/ typedef struct no ...

  7. 输入一串英文 将单词逆序输出

    输入一串英文 将单词逆序输出,如: 输入 my name is abc 输出 abc is name my 程序: #include<iostream> #include<cstri ...

  8. c语言单链表存储字符串,用链表的形式存储一个字符串 按正序和逆序输出字符串(数据结构考试)...

    满意答案 这个字符串的输出,考虑到有正序和逆序,采用链表,可以考虑用双链表.这样输出效率会比较高. 建议用循环双链表(带头结点),方便程序处理,简化操作流程,步骤明晰,便于调试. 关键函数可分为: 1 ...

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

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

最新文章

  1. Linux/ubuntu 安装 redis 4.0报错解决:redis-server.service: Can't open PID file /var/run/redis/redis-server.
  2. CPU使用率的几个重要指标含义列举
  3. python 错误类型
  4. jackson 实体转json json字符串转实体
  5. Ionic 4.0.2 发布,移动应用开发框架
  6. Mybatis之执行自定义SQL举例
  7. VC6.0 Raising Error spawning cl.exe solution
  8. 自动化测试 - 封装WebDriver的getDriver
  9. 【paper and code】StarGAN
  10. Transform.GetComponentsInChildRen()
  11. 从软件测试转行做前端,转行软件测试或者前端开发有前途么?
  12. 转神经网络压缩提升方法
  13. 金仓数据库KingbaseES本地化支持(4. 排序规则)
  14. 16个时髦的扁平化设计的 HTML5 CSS3 网站模板
  15. 词法分析器设计与实现
  16. [转]科普 | 什么是宽表?
  17. JAVA实现在线多人编辑文档,PageOffice---实现多人同时编辑一份文档
  18. 【区块链与密码学】第9-8讲:群签名在区块链中的应用 II
  19. 微电子系统封装期末总结—国科大集成电路学院
  20. 【Ubuntu】Ubuntu创建桌面快捷方式

热门文章

  1. 毕业设计-基于机器视觉的行人车辆跟踪出入双向检测计数
  2. 51nod1289 大鱼吃小鱼
  3. MarkDown学习笔记——快捷键使用
  4. Virtuoso 使用笔记
  5. 8086汇编实验(十题可用)
  6. php代码怎么注释符号,Php入门教程之PHP注释符号和格式
  7. 给QC项目瘦身的方案
  8. Java中方法的注意事项
  9. 第一章(1.1)——知识图谱简介
  10. cut --- 文本剪切工具