首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言結構體陣列查詢:書號/書名模糊查找放置地點

     編輯:程式設計綜合問答

需求

10 筆圖書記錄 (書號、書名、放置地點)。使用者輸入書號或部分書名,輸出對應地點。

資料結構設計

#define MAX_BOOKS 10
#define MAX_LEN 50

typedef struct {
    char id[MAX_LEN];      // 書號
    char title[MAX_LEN];   // 書名
    char location[MAX_LEN]; // 放置地點
} Book;

Book library[MAX_BOOKS];

查找邏輯

  1. 讀取使用者輸入字串 `query`。
  2. 遍歷陣列,若 `strcmp(book.id, query) == 0` (精確書號) 或 `strstr(book.title, query) != NULL` (書名包含關鍵字) → 輸出 `book.location`。
  3. 若無匹配,提示「查無此書」。

完整程式碼

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

#define MAX_BOOKS 10
#define MAX_LEN 50

typedef struct {
    char id[MAX_LEN];
    char title[MAX_LEN];
    char location[MAX_LEN];
} Book;

void init_data(Book *lib) {
    // 範例資料
    strcpy(lib[0].id, "B001"); strcpy(lib[0].title, "C語言程式設計"); strcpy(lib[0].location, "A架-1層");
    strcpy(lib[1].id, "B002"); strcpy(lib[1].title, "資料結構與演算法"); strcpy(lib[1].location, "A架-2層");
    // ... 其餘 8 筆自行補充
}

int main(void) {
    Book lib[MAX_BOOKS];
    init_data(lib);

    char query[MAX_LEN];
    printf("請輸入書號或書名關鍵字: ");
    scanf("%49s", query);

    int found = 0;
    for (int i = 0; i < MAX_BOOKS; i++) {
        if (strcmp(lib[i].id, query) == 0 || strstr(lib[i].title, query) != NULL) {
            printf("書號: %s  書名: %s  地點: %s\n", lib[i].id, lib[i].title, lib[i].location);
            found = 1;
        }
    }
    if (!found) printf("查無此書。\n");
    return 0;
}

進階擴充

  • 支援多關鍵字 (空格分隔) → 分割後逐一 `strstr`。
  • 大量資料 → 建立倒排索引 (書名分詞 → 書號映射) 或使用 SQLite。
  • 介面化 → 封裝 `search_by_id`、`search_by_title` 函式。

總結

結構體陣列 + `strcmp`/`strstr` 即可完成基礎查詢。重點在於資料結構定義清晰、輸入緩衝區大小限制 (`%49s`)、邊界條件處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved