question : i love u ->u love i
analysis:
主要思想是 首先整体逆置句子,然后再寻找句子中每个单词 做逆置。
需要分析的是: 单词的定义?空格如何处理?标点符号?
需要注意的地方就是:在需要知道单词的结尾的时候,需要对字符串最后一个字符进行判断,如果仍然处于单词中,这个时候仍然要结束这个单词,去逆置
1void reverse(char *s,int start,int end)
2{
3 if(s == null || start > end )
4 return;
5 for(int i = start,j = end; i < j;i++,j--)
6 {
7 char temp = s[i];s[i] = s[j];s[j] = temp;
8 }
9}
10 1void reverse_word(char *s)
2{
3 if(s == null)
4 return;
5 int len = strlen(s);
6 reverse(s,0,len-1);
7
8 int flag = 0;// word doesnot begin
9 int i = 0,start = 0,end = 0;
10 while(s[i] != '\0')
11 {
12 if(isalpha(s[i]) && flag == 0)
13 {
14 start = i;
15 flag = 1;
16 }
17 else if(flag == 1 && !isalpha(s[i]))
18 {
19 end = i-1;
20 reverse(s,start,end);
21 flag = 0;
22 }
23 else if(flag == 1 && s[i+1] == '\0')
24 {
25 if(isalpha(s[i]))
26 end = i;
27 else
28 end = i-1;
29 reverse(s,start,end);
30 }
31 i++;
32 }
33
34}
35