轉自:http://www.shnenglu.com/humanchao/archive/2008/09/12/61708.html
將字符串里詞順序倒置,如"Times New Roman"變為"Roman New Times"。以空格為分隔符。
解決方案為:先將整個字串倒置,然后依次把倒置后串中的每一個單詞倒置。
這個問題解答的思路很簡單,但是要考慮到很多種的情況,比如字符串的頭、尾有多余的空格怎么辦,如果字符串中只有空格,還有字符串中間可能會有兩個以上并列的空格。
程序如下:
1 void ReverseStr(char *pStr, int len)
2 {
3 assert(pStr);
4
5 char ch;
6 for (int i = 0; i < len/2 ; i++)
7 {
8 ch = pStr[i];
9 pStr[i] = pStr[len-1-i];
10 pStr[len-1-i] = ch;
11 }
12 }
13
14 void ReverseStrWord(char *pStr, int len)
15 {
16 assert(pStr);
17
18 if (len <= 1)
19 return;
20
21 // 倒置整個字符串
22 ReverseStr(pStr, len);
23
24 // 處理頭多余的空格
25 int i = 0;
26 if (pStr[0] == ' ') while (pStr[i] == ' ' && i < len) i++;
27
28 // 整個串都是空格
29 if (i == len)
30 return;
31
32 // 處理尾多余的空格
33 if (pStr[len - 1] == ' ') while (pStr[len - 1] == ' ' && len - 1 > 0) len--;
34
35 for (int start = i; i < len; i++)
36 {
37 // 最后的end要+1
38 if (i == len-1)
39 {
40 ReverseStr(pStr+start, i-start+1);
41 break;
42 }
43
44 // 倒置一個單詞
45 if (pStr[i] == ' ')
46 {
47 ReverseStr(pStr+start, i-start);
48 start = i+1;
49 // 處理內部并列的空格
50 if (pStr[start] == ' ')
51 {
52 while(pStr[start] == ' ') {i++;start++;};
53 }
54 }
55 }
56 }
57
posted on 2012-04-09 13:47
王海光 閱讀(403)
評論(0) 編輯 收藏 引用 所屬分類:
算法