範例:字典 -- dict.c

C 語言沒有物件,也沒有字典結構與對應的函式庫。

C 語言可以說是高階語言裡面的低階語言,很多東西你都要自己來實作,或者採用其他人所寫的函式庫。

人員查詢 -- 姓名年齡分成兩個陣列

以下是一個實現用《姓名》搜尋《年齡》的範例,這種搜尋法是線性搜尋,比較慢但程式相對簡單!

檔案:dict.c

#include <stdio.h>
#include <string.h>

int  size    = 3;
char *name[] = { "john", "mary", "george" };
int  age[]   = { 20,     30,     40       };

int findPeople(char *pName, int pSize) {
  int i;
  for (i=0; i<size; i++) {
    if (strcmp(name[i], pName)==0) {
      return i;
    }
  }
  return -1;
}

int main() {
  int mi = findPeople("mary", size);
  if (mi < 0) {
    printf("not found!\n");
  } else {
    printf("people[%d]: name=%s, age=%d\n", mi, name[mi], age[mi]);
  }
}

執行結果

D:\Dropbox\cccwd\db\c\code>gcc dict.c -o dict

D:\Dropbox\cccwd\db\c\code>dict
people[1]: name=mary, age=30

人員查詢 -- 使用結構 (struct)

以下改使用結構 struct 來儲存人的姓名和年齡,結構和物件有點像,可以用 object.data 存取資料,但是通常不會將函數宣告在結構裡面。(因為 C 沒有支援物件的觀念,所以試圖模仿物件導向時,寫起來會很囉唆且麻煩)。

檔案:dict2.c

#include <stdio.h>
#include <string.h>

#define SIZE 3

typedef struct {
  char *name;
  int  age;
} People;

People peoples[] = {
  { .name="john", .age=20}, 
  { .name="mary", .age=30}, 
  { .name="george", .age=40}
};

int findPeople(char *pName, int pSize) {
  int i;
  for (i=0; i<pSize; i++) {
    if (strcmp(peoples[i].name, pName)==0) {
      return i;
    }
  }
  return -1;
}

int main() {
  int mi = findPeople("mary", SIZE);
  if (mi < 0) {
    printf("not found!\n");
  } else {
    printf("people[%d]: name=%s, age=%d\n", mi, peoples[mi].name, peoples[mi].age);
  }
}

執行結果

D:\Dropbox\cccwd\db\c\code>gcc dict2.c -o dict2

D:\Dropbox\cccwd\db\c\code>dict2
people[1]: name=mary, age=30