一道經典面試題“I love china”的實現
阿新 • • 發佈:2018-12-12
來看一道經典的面試題,題目要求如下:
給定一個字串“I love china”,編寫程式完成以單詞為單位的逆序,如“china love i”,並要求不允許使用第三方變數儲存資料,但可以使用輔助指標變數等。
這道題主要考察字串的遍歷查詢以及分類處理,首先確定演算法,我們可以這樣處理字串:
- 將字串整體導致:“anihc evol i”
- 然後再次遍歷字串,將每個單詞倒置:“china love i”
確定完演算法後就可以用程式進行操作了,以下是程式的實現過程:
#include <stdio.h>
#define N 32
int swap (char *head ,char *tail);
int main(int argc, const char *argv[])
{
char buff[N] = "I love china";
char *head = buff, *tail = buff;
puts(buff);
//先將尾指標定位到字串尾部。
while('\0' != *tail)
tail ++;
//呼叫swap函式將整個字串倒置。
swap(buff, tail - 1);
//主函式開始掃描遍歷整個倒置後的字串。
while('\0' != *head)
{
//查詢單詞頭
while(32 == *head)
head++;
//找到頭後將尾定位到頭,開始找單詞尾。
tail = head;
while(32 != *tail && '\0' != *tail)
tail++;
//前兩 步找到頭之後將單詞倒置(因為迴圈結束後tail指向'\0',所以tail-1)。
swap(head,tail - 1);
//單詞倒置後將頭指向尾,為下次找單詞做準備。
head = tail;
}
puts(buff);
return 0;
}
//swap函式,完成指定字串倒置。
int swap(char *head, char *tail)
{
while(head < tail)
{
//異或法進行交換資料
*head ^= *tail;
*tail ^= *head;
*head ++ ^= *tail--;
}
}