zoukankan      html  css  js  c++  java
  • 翻转句子中单词的顺序

    题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
    句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
    例如输入“I am a student.”,则输出“student. a am I”。

    思路:先反转整个字符串,再分别反转每一个单词。

    反转字符串代码:

     1 void ReverseString(char *Str)
     2 {
     3     assert (Str != NULL);
     4 
     5     int nLength = strlen (Str);
     6 
     7     // 首先反转整个字符串
     8     ReverseWord (Str, nLength);
     9 
    10     // 接下来分别反转每个单词,单词以空格分开
    11     char *pStr1 = Str;
    12     char *pStr2 = NULL;
    13 
    14     while (*pStr1 != '\0')
    15     {
    16         // 确定单词的合法首字母
    17         if (*pStr1 != ' ')
    18         {
    19             pStr2 = pStr1 + 1;
    20 
    21             while ((*pStr2 != ' ') && (*pStr2 != '\0'))
    22             {
    23                 ++pStr2;
    24             }
    25 
    26             // 确定了一个单词,将其反转
    27             ReverseWord (pStr1, pStr2 - pStr1);
    28 
    29             pStr1 = pStr2;
    30         }
    31         else
    32         {
    33             ++pStr1;
    34         }
    35     }
    36 }

    其中ReverseWord这个函数实现如下:

     1 void ReverseWord(char *Str, int N)
     2 {
     3     assert (Str != NULL);
     4 
     5     assert (N > 0);
     6 
     7     char *p1 = Str;
     8     char *p2 = Str + N - 1;
     9 
    10     while (p1 < p2)
    11     {
    12         char ch = *p1;
    13         *p1 = *p2;
    14         *p2 = ch;
    15 
    16 
    17         // 这两步不能忘
    18         ++p1;
    19         --p2;
    20     }
    21 }

      最后给出一些测试结果:

    包含多个单词的字符串反转结果:

    只有一个单词的字符串反转结果:

    只有一个单词,并且这个单词只有一个字母的反转结果:

    只包含一个空格的字符串的反转结果(其实什么也没有,但这就是正常结果):

  • 相关阅读:
    LaTeX入门
    用jdom来解析xml文件小Demo
    Java乔晓松基于注解的面向AOP(切面)编程
    三层架构实战篇—系统登录实例
    selenium ide插件介绍
    WPF17行为(以控件在界面拖动为例)
    火狐浏览器显示“已阻止载入混合活动内容“的解决方法
    博客园—打赏功能
    网页返回顶部的几种方法
    自定义美化博客园
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3052477.html
Copyright © 2011-2022 走看看