一、问题描述
一个英文句子中,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; }
梦想还是要有的,万一实现了呢~~~ヾ(◍°∇°◍)ノ゙~~~