將字符串裏詞順序倒置,如"Times New Roman"變爲"Roman New Times"。以空格爲分隔符。
解決方案爲:先將整個字串倒置,然後依次把倒置後串中的每一個單詞倒置。
這個問題解答的思路很簡單,但是要考慮到很多種的情況,比如字符串的頭、尾有多餘的空格怎麼辦,如果字符串中只有空格,還有字符串中間可能會有兩個以上並列的空格。
程序如下:
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
來自:http://www.cppblog.com/humanchao/