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;
    }
    

      

  • 相关阅读:
    filter_input() 函数
    php get_magic_quotes_gpc()函数用法介绍
    echo、print、sprint、sprintf输出
    nl2br() 函数
    chop函数
    in_array 查询数组中是否存在某个值
    SQL技巧
    运算符(一)
    JS数据类型
    JS的基本语法与字面量和变量
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4977965.html
Copyright © 2011-2022 走看看