剑指offer之翻转单词顺序

1 题目

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

先反转字符串所有,然后在反转里面的单词,我们用两个首尾指针操作


 
3 代码实现

    #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
深信服三年半工作经验,目前就职游戏厂商,希望能和大家交流和学习,
微信公众号:编程入门到秃头 或扫描下面二维码
零基础入门进阶人工智能(链接)