LeetCode 1: 反转句子

作者:Lokki 出处 :http://www.cnblogs.com/Swartz/ 欢迎转载,也请保留这段声明。谢谢!

本问题出处:https://oj.leetcode.com/problems/reverse-words-in-a-string/

 

 

题目需求


 

本题目的需求很明确,就是将句子按照单词反转过来.例如:I am Lokki . 反转为Lokki am I .

 

题目分析


 

对于字符串的反转有比较成熟的实现方式,而本题需要按照单词来进行反转.首先想到的是隔离出单词,这个可以通过对空格和\0字符的判断来实现.在空格和空格(或者是\0)之间的连续字符数字即为一个单词,对于单词先进行反转.以I am Lokki 为例,得到 I ma ikkoL .最后对单个单词反转过的句子进行反转,得到最终结果 Lokki am I .

 

代码实现


 

 1 #include <stdio.h>
 2 #include <assert.h>
 3 #include <string.h>
 4 
 5 void swap(char* p,char* q)
 6 {
 7     assert((p!=NULL) && (q!=NULL));
 8     char tmp = *p;
 9     *p=*q;
10     *q=tmp;
11 }
12 
13 void reverse_word(char* p,char* q)
14 {
15     assert((p!=NULL) && (q!=NULL));
16     char* f=p;
17     char* r=q;
18     while(f<r)
19     {
20         swap(f,r);
21         f++;
22         r--;
23     }    
24 }
25 
26 void reverse_string(char* str)
27 {
28     assert(str!=NULL);
29     int len = strlen(str);
30     if(len<2)
31             return;
32     int i=0;
33     char* p=NULL;
34     char* q=NULL;
35     
36     while(i<len)
37     {
38         while(str[i]==' ' && str[i]!='\0')
39             i++;
40         p=str+i;
41         while(str[i]!=' ' && str[i]!='\0')
42             i++;
43         q=str+i;
44         reverse_word(p,q-1);
45     }
46     reverse_word(str,str+len-1);
47 }
48 
49 int main(int argc,char** argv)
50 {
51     char str[] = "reverse word in a string";
52     puts(str);
53     reverse_string(str);
54     printf("reversed:\n%s\n",str);
55     return 0;
56 }

 

Github Code

posted @ 2014-08-21 19:25  Swartz  阅读(358)  评论(0编辑  收藏  举报