倒置字符串不会?看这篇!

简介: 倒置字符串

请看题目:


将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I


输入描述:

每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100


输出描述:

依次输出倒置之后的字符串,以空格分割


大体思路:


先整体倒置,再倒置单词;

两次倒置的逻辑是相同的;

只是起始(下标)不同。


解题:


由于两次倒置的逻辑相同,这里先写一个倒置函数:

void reverse(char*left,char*right)
{
  while (left<right)
  {
    char temp = *left;
    *left = *right;
    *right = temp;
    left++;
    right--;
  }
}


整体倒置:


reverse函数传参,这两个参数还是比较好传的

第一个是arr(数组首元素的地址);

另一个是arr+strlen(arr)-1  (数组末尾元素的地址);


单词倒置:


这一部分需要注意的是如何寻找一个单词的首尾

微信图片_20230414224158.png

如图所示,我们可以拟两个变量,一个在开头守着,另一个负责寻找结束标识

这样就相当于把一个单词选定了,把位置传入reverse函数就可以了。

接下来重复上述操作,直到遇到'\0'为止。

char* cur = arr;
  while (*cur)//当*cur为\0时结束,可作为循环判定标志
  {
    char* start = cur;
    while (*cur != ' '&&*cur!='\0')
    {
      cur++;
    }
    reverse(start, cur-1);
    if(*cur!='\0')//避免跳过\0 导致死循环
      cur++;
  }


最终答案:


#include<stdio.h>
#include<string.h>//包含strlen()
//字符串倒置
void reverse(char*left,char*right)
{
  while (left<right)
  {
    char temp = *left;
    *left = *right;
    *right = temp;
    left++;
    right--;
  }
}
int main()
{
  //输入
  char arr[100] = { 0 };
  gets(arr);//防止遇到空格停止读取
  //整体倒置
  reverse(arr,arr+strlen(arr) - 1);
  //单词倒置
  char* cur = arr;
  while (*cur)
  {
    char* start = cur;
    while (*cur != ' '&&*cur!='\0')
    {
      cur++;
    }
    reverse(start, cur-1);
    if(*cur!='\0')
      cur++;
  }
  //输出
  printf("%s\n", arr);
  return 0;
}
目录
相关文章
|
资源调度 JavaScript
nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法
nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法
8591 2
|
算法 C语言
算法竞赛入门【码蹄集新手村600题】(MT1220-1240)C语言(二)
算法竞赛入门【码蹄集新手村600题】(MT1220-1240)C语言(二)
246 0
|
JSON 数据格式 Python
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
|
缓存 网络协议 安全
TCP首部格式【TCP原理(笔记五)】
TCP首部格式【TCP原理(笔记五)】
793 0
TCP首部格式【TCP原理(笔记五)】
|
传感器 设计模式 人工智能
探索技术之路:个人成长与行业变革
【8月更文挑战第13天】在技术的海洋中航行,每一位开发者都是探险者。本文通过一段个人的技术之旅,探讨了技术学习、实践和创新过程中的感悟与挑战。从最初的代码编写到深入理解技术背后的原理,再到预见技术未来的发展趋势,每一步都充满了发现和成长。文章旨在鼓励读者在技术的快速变化中找到自己的定位,不断学习和适应,以实现个人价值的最大化。
|
存储 SQL 数据库
数据完整性约束
数据完整性约束
339 5
|
存储 算法 vr&ar
☆打卡算法☆LeetCode 212. 单词搜索 II 算法解析
☆打卡算法☆LeetCode 212. 单词搜索 II 算法解析
☆打卡算法☆LeetCode 212. 单词搜索 II 算法解析
|
SQL 弹性计算 监控
实践教程之基于Prometheus+Grafana的PolarDB-X监控体系
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。
实践教程之基于Prometheus+Grafana的PolarDB-X监控体系
带你读《2022技术人的百宝黑皮书》——CoHOZ: Contrastive Multimodal Prompt Tuning for Hierarchical Open-set Zero-shot Recognition(1)
带你读《2022技术人的百宝黑皮书》——CoHOZ: Contrastive Multimodal Prompt Tuning for Hierarchical Open-set Zero-shot Recognition(1)
154 0
|
存储 JavaScript 前端开发
es6基础(1)
es6基础(1)
166 0
es6基础(1)