【C/C++】将字符串按空格逆置

来源:互联网 发布:一键转发朋友圈 源码 编辑:程序博客网 时间:2024/06/01 16:16

一、题目要求

有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。

二、题目分析

初级理解:

乍一看,这是一个字符串逆置

可是真的有这么简单吗?

具体分析:

如上图所示

首先先将整体的字符串进行逆置

然后对各个单词逆置就可以得到我们想要的结果

 

所以要设置一个函数reverse_all,用来专门进行逆置,参数为逆置的首末地址

然后再用个函数reverse,进行调用reverse_all,来解这道题

三、代码实现

函数代码:

#include<stdio.h>#include<string.h>#include<assert.h>char* reverse_all(char* start , char* end){assert(start != NULL);assert(end != NULL);char* p = start;char tmp = 0;while(start < end){tmp = *start;*start = *end;*end = tmp;start++;end--;}return p;}char* reverse(char* str){assert(str != NULL);char* pstr = str;char* start = str;char* end = str;while(*end != '\0'){while((*end != ' ')&&(*end != '\0')){end++;}end--;reverse_all(start,end);start = end + 2;end = start;}return pstr;}

main函数代码块:

int main(){char str[128] = {"blog to my welcome"};reverse_all(str,str-1+strlen(str));printf("%s\n",reverse(str));return 0;}

运行结果:

 

 

1 0