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

简介: 倒置字符串

请看题目:


将一句话的单词进行倒置,标点不倒置。比如 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;
}
目录
相关文章
|
5月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
145 4
|
8月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
121 0
|
7月前
|
Web App开发 自然语言处理 算法
一文搞懂:【论文笔记】BINE:二分网络嵌入
一文搞懂:【论文笔记】BINE:二分网络嵌入
57 0
|
7月前
看了那么多的函数递归的文章,看懂了但不会用,看看这篇吧!
看了那么多的函数递归的文章,看懂了但不会用,看看这篇吧!
|
8月前
【错题集-编程题】重排字符串(贪心 + 构造)
【错题集-编程题】重排字符串(贪心 + 构造)
|
8月前
|
自然语言处理 算法 编译器
编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)
编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)
189 0
每日一题,数组字符串的匹配问题
每日一题,数组字符串的匹配问题
|
算法 索引
LeetCode算法小抄--二分查找及其变体形式
LeetCode算法小抄--二分查找及其变体形式
|
测试技术
每日一题——倒置字符串
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
115 0
|
C语言 C++ 容器
C++ primer 复习 第三章 字符串,向量和数组(1)
C++ primer 复习 第三章 字符串,向量和数组
C++ primer 复习 第三章 字符串,向量和数组(1)