- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /* 将str[start...end]逆序。即:abcde => edcba */
- void reverse(char *str, int start, int end){
- char temp;
- while(start < end){
- temp = str[start];
- str[start] = str[end];
- str[end] = temp;
- start++;
- end--;
- }
- }
- /*
- * 在函数外部要释放返回值指针指向的内存。
- * 实现:将string全部逆序,再将每一个单词(单词间空格隔开)分别逆序。
- * 即: hello world => dlrow olleh => world hello
- */
- char* reverse_str(char* string){
- if(!string)
- return;
- int str_len = strlen(string);//将string全部逆序
- int p,q;
- char *str = (char*)malloc(sizeof(char)*str_len);
- strcpy(str, string);
- reverse(str,0,str_len-1);
- p=0;
- q=0;
- while(str[p]==' '){//跳过前导空格
- p++;
- q++;
- }
- while(q < str_len){
- //找到相邻两个空格之间的单词
- while(p < str_len && str[p]==' '){
- p++;
- }
- if(p==str_len)
- break;
- q=p;
- while(q < str_len && str[q]!=' '){
- q++;
- }
- reverse(str,p,q-1);//对这个单词进行逆序
- p=q;
- }
- return str;
- }
- int main(){
- char* str = reverse_str("Hello world Test Reverse");
- printf("%s\\n", str);
- free(str);
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/130520149552.html
来源: http://www.codesnippet.cn/detail/130520149552.html