【我解C语言面试题系列】013 以单词为单位的翻转字符串

论坛 期权论坛 脚本     
匿名技术用户   2020-12-31 09:11   11   0
【我解C语言面试题系列】013 以单词为单位的翻转字符串

以单词为单位的翻转字符串

原题Write a function string reverse string word By word (String input) that reverses a string word by word.

For instance:

"The house is blue" --> "blue is house The"

"Zed is dead" -->"dead is Zed"

"All-in-one" -->"All-in-one"

在不增加任何辅助数组空间的情况下,对于这个问题我们可以采用的办法就是:

办法一

1、翻转整个字符串。

2、翻转每一个单词。

办法二

1、翻转每一个单词。

2、翻转整个字符串。

办法一和二其实就是一个顺序的问题,并不影响算法的时间或空间复杂度。

下面给出代码:【本程序在DEV C++ 4.9.9.2 下编译通过】

#include <stdio.h>

#define IS_PRINT(ch) ( (ch) > 0x20 && (ch) < 0x7E ) // except space

char * ReverseEveryWord(char *str);

char * ReverseWholeString(char * str);

char * LR_Reverse(char *left,char *right);

int main(void)

{

char str[] = "Hello word! **";

char *p = str;

#if 0

ReverseWholeString(str);

ReverseEveryWord(str);

puts(str);

#else

ReverseEveryWord(str);

ReverseWholeString(str);

puts(str);

#endif

system("pause");

return 0;

}

char * ReverseEveryWord(char *str)

{

char *right = str,*left = str;

if(str == NULL)

return NULL;

while( !IS_PRINT(*right) )

right++;

while(*right)

{

left = right;

while(IS_PRINT(*right))

right++;

LR_Reverse(left,right-1);

while(*right && !IS_PRINT(*right))

right++;

}

return str;

}

char * ReverseWholeString(char * str)

{

char *p = str;

if(str == NULL)

return NULL;

while(*p) p++;

p--;

LR_Reverse(str,p);

return str;

}

char * LR_Reverse(char *left,char *right)

{

char tt,*ret = left;

if(left == NULL || right == NULL)

return NULL;

while(left < right)

{

tt = *left;

*left++ = *right;

*right-- = tt;

}

return ret;

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP