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

简介: 倒置字符串

请看题目:


将一句话的单词进行倒置,标点不倒置。比如 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;
}
目录
相关文章
|
6月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
104 0
|
5月前
|
算法
力扣经典150题第十九题:最后一个单词的长度
力扣经典150题第十九题:最后一个单词的长度
30 0
|
5月前
|
存储 算法 程序员
力扣经典150题第三十一题:无重复字符的最长子串
力扣经典150题第三十一题:无重复字符的最长子串
31 0
|
6月前
|
存储 算法 API
☆打卡算法☆LeetCode 151. 颠倒字符串中的单词 算法解析
☆打卡算法☆LeetCode 151. 颠倒字符串中的单词 算法解析
|
算法 C语言 C++
Leetcode 每日一题 1234. 替换子串得到平衡字符串
有一个只含有 'Q', 'W', 'E', 'R' 四种字符,且长度为 n 的字符串
46 0
Leetcode 每日一题 1234. 替换子串得到平衡字符串
每日一题,数组字符串的匹配问题
每日一题,数组字符串的匹配问题
【基础算法】浅浅刷个小题 # 找不同 # 字符串中的单词数 # 重新排列字符串 #
【基础算法】浅浅刷个小题 # 找不同 # 字符串中的单词数 # 重新排列字符串 #
|
测试技术
每日一题——倒置字符串
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
108 0
|
算法
【Day19】LeetCode算法刷题(附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】
学习了解附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】。
118 0
【Day19】LeetCode算法刷题(附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】
|
人工智能 BI
AcWing 3789. 隐藏字符串(思维)
AcWing 3789. 隐藏字符串(思维)
98 0