1. 程式人生 > >有一段文字,將文字中的所有單詞,存放到一個字元指標陣列中(要求每個單詞記憶體恰好)

有一段文字,將文字中的所有單詞,存放到一個字元指標陣列中(要求每個單詞記憶體恰好)

char a[] = "  my    name is hanmeimei lilei and you no fine thanks  ";

    int i = 0;//迴圈變數

int j = 0;//記錄每個單詞的長度

int k = 0;//記錄指標陣列的下標

    char *words[100] = {0};//定義一個指標陣列,存放堆區空間地址

    char tempStr[20] = {0};//定義一個臨時字元陣列,儲存單詞

    while (1) {

        if (a[i] != ' ' && a[i] != '\0') {

            tempStr[j] = a[i];

//a[i]沒有遇到空格和'\0',a[i]中的字元拷貝到臨時字元陣列中

            j++;

        } else if(j != 0){

            tempStr[j] = '\0';//a[i]遇到' '或者'\0',在臨時字元陣列中補上'\0'

            words[k] = malloc(strlen(tempStr) + 1);//在堆區開闢當前字串所需的空間

            strcpy(words[k], tempStr);//將臨時陣列中的內容拷貝到堆區中

            k++;

            j = 0;

        }

        if (a[i] == '\0') {

break;//a[i] == 0,跳出迴圈

        }

        i++;

    }

    for (int n = 0; n < k; n++) {

        printf("%s ", words[n]);

        free(words[n]);//釋放空間

        words[n] = NULL;//指標指向無效空間

    }