C语言基础 (15) 翻译软件

  1. 课程回顾

 

 

2作业讲解

 

3 指针复习

 

(1)     返回栈区地址

 

 

(错

 

(对

 

(错,p一直是空的,同时引起堆区空间没释放

 

 

( tmp指针给堆空间赋值,最后堆区没有释放

 

 

04 指针复习_2

 

(注意:strcpy的第一个参数虽然没有* 但是实际操作的是指针所指向的内存,即:堆区的内存

 

案例:

 

 

(p没有指向空间,所以段错误

 

5 二级指针做形参

 

07_快译通案例:单词的存储

 

 

08_快译通案例:单词遍历

 

09_快译通案例:释放堆区空间

 

10_快译通案例:单词查询

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 3

 

struct dict

{

    char *key;

    char *content;

};

 

void get_dict(struct dict **tmp)

{

    // 在堆区分配MAX个结构体空间

    *tmp = (struct dict *)malloc(MAX * sizeof(struct dict));

    if (*tmp == NULL)

    {

        return;

    }

    // 需要给每个结构体设置内容

 

    // 0个结构体

    // 放第0个单词

    (*tmp)[0].key = (char *)malloc(strlen("a") + 1);

    strcpy((*tmp)[0].key, "a");

    // 放第0个单词的解析

    (*(*tmp + 0)).content = (char *)malloc(strlen("art.字母a") + 1);

 

    // 1个结构体

    (*tmp)[1].key = (char *)malloc(strlen("a.m.") + 1);

    strcpy((*tmp)[1].key, "a.m.");

    // 放第1个单词的解析

    (*(*tmp + 1)).content = (char *)malloc(strlen("a啊实打解析实的字母a") + 1);

 

    // 1个结构体

    (*tmp)[2].key = (char *)malloc(strlen("abandon") + 1);

    strcpy((*tmp)[2].key, "abandon");

    // 放第2个单词的解析

    (*(*tmp + 2)).content = (char *)malloc(strlen("抛弃、放弃") + 1);

}

 

void print_dict(struct dict *tmp)

{

    int i = 0;

    for (i = 0; i < MAX; i++)

    {

        printf("[%s]%s\n", tmp[i].key, tmp[i].content);

    }

}

 

void free_dict(struct dict *tmp)

{

    // 先释放成员变量

    int i = 0;

    for (i = 0; i < MAX; i++)

    {

        if (tmp[i].key != NULL)

        {

            free(tmp[i].key);

            tmp[i].key = NULL;

        }

        if (tmp[i].content != NULL)

        {

            free(tmp[i].content);

            tmp[i].content = NULL;

        }

    }

    // 再释放结构体指针变量

    free(tmp);

    tmp = NULL;

}

 

int search_dict(struct dict *tmp, char *key, char *content)

{

    int i = 0;

    for (i = 0; i < MAX; i++)

    {

        if (strcmp(tmp[i].key, key) == 0)

        {

            strcpy(content, tmp[i].content);

            return 1;

        }

    }

    return 0;

}

 

int main(int argc, char const *argv[])

{

    struct dict *p = NULL;

 

    //1、给p分配空间,分配完空间后,需要设置内容

    get_dict(&p);

 

    //2、遍历单词

    // print_dict(p);

 

    // 查询功能

    char key[1024];     // 单词

    char content[1024]; // 单词解析

 

    while (1)

    {

        printf("请输入需要查询单词");

        scanf("%s", key);

 

        if (strcmp(key, "break") == 0)

        {

            break;

        }

 

        // 如果有返回真,没有返回假

        int flag = search_dict(p, key, content);

 

        if (flag == 0)

        {

            printf("没有此单词: %s\n", key);

        }

        else

        {

            printf("[%s]的解释为: %s\n", key, content);

        }

    }

 

    //3、释放空间

    free_dict(p);

 

    return 0;

}

 

 

11_快译通案例:代码引导

 

 

12_快译通案例:代码编译运行

 

posted @ 2019-01-20 11:59  hh9515  阅读(687)  评论(0)    收藏  举报