劍指offer之翻轉單詞順序

1 題目

輸入一個英文橘子,翻轉句子中的單詞順序,但是單詞內(nèi)字符串的順序不變,簡單起見,標點符號和普通字符字母一樣處理,例如輸入字符串"I am a student.",則輸出"student. a am I"
 
 
2 思路

先反轉字符串所有,然后在反轉里面的單詞,我們用兩個首尾指針操作


 
3 代碼實現(xiàn)

    #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

 

 


 


作者:chen.yu
深信服三年半工作經(jīng)驗,目前就職游戲廠商,希望能和大家交流和學習,
微信公眾號:編程入門到禿頭 或掃描下面二維碼
零基礎入門進階人工智能(鏈接)