zoukankan      html  css  js  c++  java
  • 面试题42-1:翻转单词顺序

    题目描述

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

    题目分析

    剑指Offer(纪念版)P218

    两次翻转字符串

    代码实现

    void Reverse(char *pBegin, char *pEnd)
    {
        if(pBegin == NULL || pEnd == NULL)
            return;
    
        while(pBegin < pEnd)
        {
            char temp = *pBegin;
            *pBegin = *pEnd;
            *pEnd = temp;
    
            pBegin ++, pEnd --;
        }
    }
    
    char* ReverseSentence(char *pData)
    {
        if(pData == NULL)
            return NULL;
    
        char *pBegin = pData;
    
        char *pEnd = pData;
        while(*pEnd != '')
            pEnd ++;
        pEnd--;
    
        // 翻转整个句子
        Reverse(pBegin, pEnd);
    
        // 翻转句子中的每个单词
        pBegin = pEnd = pData;
        while(*pBegin != '')
        {
            if(*pBegin == ' ')
            {
                pBegin ++;
                pEnd ++;
            }
            else if(*pEnd == ' ' || *pEnd == '')
            {
                Reverse(pBegin, --pEnd);
                pBegin = ++pEnd;
            }
            else
            {
                pEnd ++;
            }
        }
    
        return pData;
    }
    

      

  • 相关阅读:
    Nginx详解
    MySQL数据库(未完)
    PXE自动装机
    Rsync数据同步服务
    NFS网络文件系统
    inotify事件监控工具
    scp ssh-key连接原理
    生产环境ssh登陆策略
    npm ERR! errno -4048
    js判断手机系统语言动态引入不同js文件
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4977965.html
Copyright © 2011-2022 走看看