C语言对单词信息进行增删改查案例代码

题目描述

(1)添加单词信息:输入单词信息并予以保存。单词信息包括英文单词、中文解释。若输入信息中的英文单词已经存在,则不允许添加该信息。
(2)查询单词信息:根据输入的英文单词查询单词信息。若输入的内容为空,则查询出所有的单词信息。若输入的只是英文单词的部分内容,则查询出包含了此内容的所有单词的信息,例如:输入 st,可查询出 student 和 study 的单词信息。若查询出多条信息,则将这些信息按英文单词进行字典排序后再显示出来。
(3)删除单词信息:根据输入的英文单词删除相应的单词信息。
(4)修改单词信息:用输入的单词信息替换英文单词与之相同的已有单词信息。

解题思路

  1. 定义结构体Word,包含英文单词和中文解释两个字段;
  2. 定义一个数组wordList,用来保存单词信息;
  3. 实现添加单词信息函数addWord,首先判断输入的英文单词是否已经存在于wordList中,如果存在则不允许添加,否则将该单词信息添加到wordList中;
  4. 实现查询单词信息函数queryWord,根据输入的英文单词查询单词信息。如果输入内容为空,则查询出所有的单词信息;如果输入的只是英文单词的部分内容,则查询出包含了此内容的所有单词的信息,并按英文单词进行字典排序后显示出来;
  5. 实现删除单词信息函数deleteWord,根据输入的英文单词删除相应的单词信息;
  6. 实现修改单词信息函数modifyWord,用输入的单词信息替换英文单词与之相同的已有单词信息。

代码实现

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

#define MAX_LENGTH 100

typedef struct Word {
    char english[MAX_LENGTH];
    char chinese[MAX_LENGTH];
} Word;

void addWord(Word wordList[], int *count) {
    char english[MAX_LENGTH];
    char chinese[MAX_LENGTH];
    
    printf("请输入英文单词:");
    scanf("%s", english);
    
    // 判断单词是否已存在
    for (int i = 0; i < *count; i++) {
        if (strcmp(wordList[i].english, english) == 0) {
            printf("该单词已存在!\n");
            return;
        }
    }
    
    printf("请输入中文解释:");
    scanf("%s", chinese);
    
    strcpy(wordList[*count].english, english);
    strcpy(wordList[*count].chinese, chinese);
    
    (*count)++;
    
    printf("添加成功!\n");
}

void queryWord(Word wordList[], int count) {
    char query[MAX_LENGTH];
    int queryCount = 0;
    char queryResult[MAX_LENGTH][MAX_LENGTH];
    
    printf("请输入查询内容:");
    scanf("%s", query);
    
    // 查询单词信息
    for (int i = 0; i < count; i++) {
        if (strcmp(wordList[i].english, query) == 0) {
            printf("%s %s\n", wordList[i].english, wordList[i].chinese);
            return;
        } else if (strstr(wordList[i].english, query) != NULL) {
            strcpy(queryResult[queryCount], wordList[i].english);
            queryCount++;
        }
    }
    
    // 如果查询结果不为空,则按英文单词进行字典排序后显示
    if (queryCount > 0) {
        for (int i = 0; i < queryCount - 1; i++) {
            for (int j = i + 1; j < queryCount; j++) {
                if (strcmp(queryResult[i], queryResult[j]) > 0) {
                    char temp[MAX_LENGTH];
                    strcpy(temp, queryResult[i]);
                    strcpy(queryResult[i], queryResult[j]);
                    strcpy(queryResult[j], temp);
                }
            }
        }
        
        for (int i = 0; i < queryCount; i++) {
            for (int j = 0; j < count; j++) {
                if (strcmp(wordList[j].english, queryResult[i]) == 0) {
                    printf("%s %s\n", wordList[j].english, wordList[j].chinese);
                }
            }
        }
    } else {
        printf("未查询到相关单词信息!\n");
    }
}

void deleteWord(Word wordList[], int *count) {
    char english[MAX_LENGTH];
    
    printf("请输入要删除的英文单词:");
    scanf("%s", english);
    
    // 查找并删除单词信息
    for (int i = 0; i < *count; i++) {
        if (strcmp(wordList[i].english, english) == 0) {
            for (int j = i; j < *count - 1; j++) {
                strcpy(wordList[j].english, wordList[j+1].english);
                strcpy(wordList[j].chinese, wordList[j+1].chinese);
            }
            (*count)--;
            printf("删除成功!\n");
            return;
        }
    }
    
    printf("未找到该单词信息!\n");
}

void modifyWord(Word wordList[], int count) {
    char english[MAX_LENGTH];
    char newEnglish[MAX_LENGTH];
    char newChinese[MAX_LENGTH];
    
    printf("请输入要修改的英文单词:");
    scanf("%s", english);
    
    // 查找并修改单词信息
    for (int i = 0; i < count; i++) {
        if (strcmp(wordList[i].english, english) == 0) {
            printf("请输入修改后的英文单词:");
            scanf("%s", newEnglish);
            printf("请输入修改后的中文解释:");
            scanf("%s", newChinese);
            
            strcpy(wordList[i].english, newEnglish);
            strcpy(wordList[i].chinese, newChinese);
            
            printf("修改成功!\n");
            return;
        }
    }
    
    printf("未找到该单词信息!\n");
}

int main() {
    Word wordList[MAX_LENGTH];
    int count = 0;
    int choice;
    
    while (1) {
        printf("请选择操作:\n");
        printf("1. 添加单词信息\n");
        printf("2. 查询单词信息\n");
        printf("3. 删除单词信息\n");
        printf("4. 修改单词信息\n");
        printf("5. 退出\n");
        printf("请选择:");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1:
                addWord(wordList, &count);
                break;
            case 2:
                queryWord(wordList, count);
                break;
            case 3:
                deleteWord(wordList, &count);
                break;
            case 4:
                modifyWord(wordList, count);
                break;
            case 5:
                exit(0);
            default:
                printf("请输入正确的选项!\n");
        }
    }
    
    return 0;
}

复杂度分析

  • 添加单词信息、查询单词信息、删除单词信息和修改单词信息的时间复杂度均为O(n),其中n为数组wordList的长度;
  • 空间复杂度为O(n),用来存储wordList。
© 版权声明
THE END
喜欢就支持一下吧
点赞10赞赏 分享