剑指offer之翻转单词顺序

简介: 剑指offer之翻转单词顺序

1 题目

输入一个英文橘子,翻转句子中的单词顺序,但是单词内字符串的顺序不变,简单起见,标点符号和普通字符字母一样处理,例如输入字符串"I am a student.",则输出"student. a am I"


2 思路

先反转字符串所有,然后在反转里面的单词,我们用两个首尾指针操作


3 代码实现

#include <stdio.h>
/*
 * 反转整个字符串
 */
void reverse(char *begin, char *end)
{
  if (NULL == begin || NULL == end)
    return;
  while (begin < end)
  {
    char temp = *end;
    *end = *begin;
    *begin = temp;
    ++begin;
    --end;
  }
}
/*
 * 反转字符串里面的单词
 */
char* reverseNumeber(char *str)
{
  if (NULL == str)
  {
    return NULL;
  }
  char *begin = str;
  char *end = str;
  while (*end != '\0')
  {
    end++;
  }
  --end;
  //反转整个字符串
  reverse(begin, end);
  //再反转里面的单词
  begin = end = str;
  while (*begin != '\0')
  {
    if (*begin == ' ')
    {
      begin++;
      end++;
    }
    else if (*end == ' ' || *end == '\0')
    {
      //如果这里是用reverse(begin, end--)
      //那么我们用' '和前面的指针替换,有问题。
      reverse(begin, --end);
      begin = ++end;
    }
    else
    {
      ++end;
    }
  }
  return str;
}
int main()
{
  char a[] = "chenyu word hello";
  char *result = NULL;
  result = reverseNumeber(a);
  if (NULL == result)
  {
    printf("result is NULL\n");
  }
  else
  {
    printf("%s\n", result);
  }
  return 0;
}

4 运行结果

hello word chenyu

 

 

 

相关文章
|
6月前
|
Java API C++
leetcode-151:翻转字符串里的单词
leetcode-151:翻转字符串里的单词
59 0
|
6月前
|
Java
【剑指offer】-翻转单词序列-40/67
【剑指offer】-翻转单词序列-40/67
|
6月前
剑指Offer LeetCode 面试题58 - I. 翻转单词顺序
剑指Offer LeetCode 面试题58 - I. 翻转单词顺序
41 0
剑指offer 65. 翻转单词顺序
剑指offer 65. 翻转单词顺序
58 0
翻转单词顺序(简单难度)
翻转单词顺序(简单难度)
72 0
翻转单词顺序(简单难度)
|
算法 Java
翻转字符串里的单词 (LeetCode 151)
翻转字符串里的单词 (LeetCode 151)
156 0
|
存储 API 索引
leetcode【字符串—中等】151.翻转字符串里的单词
leetcode【字符串—中等】151.翻转字符串里的单词
leetcode【字符串—中等】151.翻转字符串里的单词
|
机器学习/深度学习
跟我打卡LeetCode 58最后一个单词长度&59螺旋矩阵Ⅱ&60排列序列
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词,请返回 0 。 说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
97 0
跟我打卡LeetCode 58最后一个单词长度&59螺旋矩阵Ⅱ&60排列序列
翻转单词顺序
翻转单词顺序
102 0