题目描述
(1)添加单词信息:输入单词信息并予以保存。单词信息包括英文单词、中文解释。若输入信息中的英文单词已经存在,则不允许添加该信息。
(2)查询单词信息:根据输入的英文单词查询单词信息。若输入的内容为空,则查询出所有的单词信息。若输入的只是英文单词的部分内容,则查询出包含了此内容的所有单词的信息,例如:输入 st,可查询出 student 和 study 的单词信息。若查询出多条信息,则将这些信息按英文单词进行字典排序后再显示出来。
(3)删除单词信息:根据输入的英文单词删除相应的单词信息。
(4)修改单词信息:用输入的单词信息替换英文单词与之相同的已有单词信息。
解题思路
- 定义结构体Word,包含英文单词和中文解释两个字段;
- 定义一个数组wordList,用来保存单词信息;
- 实现添加单词信息函数addWord,首先判断输入的英文单词是否已经存在于wordList中,如果存在则不允许添加,否则将该单词信息添加到wordList中;
- 实现查询单词信息函数queryWord,根据输入的英文单词查询单词信息。如果输入内容为空,则查询出所有的单词信息;如果输入的只是英文单词的部分内容,则查询出包含了此内容的所有单词的信息,并按英文单词进行字典排序后显示出来;
- 实现删除单词信息函数deleteWord,根据输入的英文单词删除相应的单词信息;
- 实现修改单词信息函数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