[C/C++笔面试]编程实现字符串中各单词的翻转

/*********************************************************
-  Copyright (C): 2016
-  File name    : revstr.c
-  Author       : - Zxn -
-  Date         : 2016年08月28日 星期日 10时35分39秒
-  Description  : 编程实现字符串中各单词的翻转
*  *******************************************************/
#include 

void swap(char *strone, char *strtwo)
{
    *strone ^= *strtwo;
    *strtwo ^= *strone;
    *strone ^= *strtwo;
}

void revstr(char *str)
{
    char *start = str;
    char *end = str;
    char *ptr = str;

    //遍历查找字符串
    while (*ptr++ != '\0')
    {
        //找到一个单词
        if (*ptr == ' ' || *ptr == '\0')
        {
            //end指向单词尾部
            end = ptr - 1;
            //完成局部交换
            while (start < end)
            {
                swap(&(*start++), &(*end--));
            }
            start = end = ptr + 1;
        }
    }
    //I ma morf iahgnahS
    //完成整体交换
    start = str, end = ptr - 2;
    while(start < end)
    {
        swap(&(*start++), &(*end--));
    }
    //Shanghai from am I
}

int main()
{
    char str[] = "I am from Shanghai";
    printf("str = %s\n",str);

    revstr(str);
    printf("src = %s\n", str);
    return 0;
}

这里写图片描述

你可能感兴趣的:(C/C++)