剑指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

 

 

 

上一篇:城市大脑入选国家新一代人工智能开放创新平台,阿里iDST副院长华先胜技术解读


下一篇:jquery级联下拉框