程序员面试题100题第07题——翻转句子中单词的顺序

题目:

输入一个英文句子,反转句子中单词的顺序,但是单词内字符顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字幕一样处理。

分析:

首先反转句子,再逐个单词反转。

代码:

注意while循环中对指针的操作;

注意const在此处的用处;程序员面试题100题第21题——左旋转字符串

char* ReverseString(char * const pStart, char * const pEnd)//反转字符串
{
    char *pS=pStart;
    char *pE=pEnd;

    if(pS != NULL && pE != NULL)
    {
        char temp;
        while(pS <= pE)
        {
            temp=*pS;
            *pS=*pE;
            *pE=temp;
            pS++;
            pE--;
        }
    }
    return pStart;
}

 

char* ReverseSentence(char* const pSentence)
{
    if(pSentence==NULL)
    {
        return NULL;
    }

    char* pBegin=pSentence; 
    char* pEnd=pSentence; 
    char* pTemp=pSentence;

    while(*pEnd != '\0')//注意*号 最容易遗漏*
    {
        pEnd++;
    }
    pEnd--;//注意
    ReverseString(pBegin, pEnd);

    pBegin=pSentence;
    pEnd=pSentence;

    while(*pBegin != '\0')//*pBegin 最容易遗漏*
    {
        if(*pBegin ==' ')//开始为空格
        {
            pBegin++;
            pEnd++;
            continue;
        }else if(*pEnd == ' ' ||*pEnd =='\0')
        {
            ReverseString(pBegin, --pEnd);
            pBegin=++pEnd;
        }else{
            pEnd++;
        }
    }
    return pSentence;
}
posted @ 2012-10-02 20:57  logzh  阅读(241)  评论(0编辑  收藏  举报