单词逆序--翻转

一、问题描述

    一个英文句子中,eg:I love China. 把它按照单词逆序,变成China love I.

二、解题思路

    N步反转:

    step1:首先一空格为拆分,将字符串分为k个部分(向后取空格的原则);

    step2:分别对这k个部分的子串进行反转

    step3:最后对字符串整体反转

三、算法代码

/***********************
Author:tmw
date:2018-3-17
***********************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define swap(x,y,t) (t=x,x=y,y=t)

void reverseString( char* str, int front, int end )
{
    char temp;
    while( front<end )
    {
        swap(str[front],str[end],temp);
        front++;end--;
    }
}

void three_steps_reverse( char* str )
{
    int i = 0;
    int j = 0;
    int mark_left,mark_right;
    while( i<strlen(str) )
    {
        while( i<strlen(str)&&str[i]!=' ' )
            i++;

        /**i此时指向空格,这里将坐标回移**/
        i--;

        /**保护i、j的游标不被改动**/
        mark_left = j;
        mark_right = i;

        reverseString(str,mark_left,mark_right);
        printf("%s\n",str);
        j = i + 2; //j指向下一个单词的开头位置
        i = j;
    }
    /**最后整体翻转**/
    reverseString(str,0,strlen(str)-1);
}

四、测试代码及结果

int main()
{
    printf("测试代码\n");

    char str[] = "I love China.";
    printf("翻转前:%s\n",str);
    three_steps_reverse( str );
    printf("翻转后:%s\n",str);

    return 0;
}

梦想还是要有的,万一实现了呢~~~ヾ(◍°∇°◍)ノ゙~~~

猜你喜欢

转载自blog.csdn.net/qiki_tangmingwei/article/details/80109666