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 }