1. 程式人生 > >一道經典面試題“I love china”的實現

一道經典面試題“I love china”的實現

來看一道經典的面試題,題目要求如下:

給定一個字串“I love china”,編寫程式完成以單詞為單位的逆序,如“china love i”,並要求不允許使用第三方變數儲存資料,但可以使用輔助指標變數等。

這道題主要考察字串的遍歷查詢以及分類處理,首先確定演算法,我們可以這樣處理字串:

  1. 將字串整體導致:“anihc evol i”
  2. 然後再次遍歷字串,將每個單詞倒置:“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--; } }