You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从char类型数据中仅提取Int值以构建二叉搜索树

修复方案与代码实现

现有代码核心问题

  • 结构体定义不符合需求:password字段为单个char类型,无法存储字符序列,需改为char数组存储字符串
  • add函数逻辑错误:当前判断malloc返回NULL时才给节点赋值,逻辑完全颠倒,且未实现二叉搜索树的插入规则、未维护根节点
  • 读取逻辑未做字段拆分:当前仅逐字符打印文件内容,没有按照「数字+空格+字符序列」的格式提取对应字段
  • 缺少边界校验:未判断文件打开是否成功、读取内容是否合法

完整实现代码

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

// 假设字符序列最长为63字节,可根据实际需求调整
#define MAX_PWD_LEN 64

typedef struct treenode{
    struct treenode *lchild, *rchild;
    int id;
    char password[MAX_PWD_LEN]; // 存储字符序列作为key
} node;

// 维护BST根节点
static node *root = NULL;

// BST插入逻辑,以password为key排序
node* add(node *cur, int id, const char* password) {
    if (cur == NULL) {
        node *new_node = (node*)malloc(sizeof(node));
        if (new_node == NULL) {
            perror("malloc failed");
            exit(EXIT_FAILURE);
        }
        new_node->lchild = new_node->rchild = NULL;
        new_node->id = id;
        strncpy(new_node->password, password, MAX_PWD_LEN - 1);
        new_node->password[MAX_PWD_LEN - 1] = '\0'; // 确保字符串结尾
        return new_node;
    }
    int cmp_res = strcmp(password, cur->password);
    if (cmp_res < 0) {
        cur->lchild = add(cur->lchild, id, password);
    } else if (cmp_res > 0) {
        cur->rchild = add(cur->rchild, id, password);
    } else {
        // key重复的处理逻辑,可根据需求修改,这里默认覆盖id
        cur->id = id;
    }
    return cur;
}

int main(void) {
    FILE *fp = fopen("data.txt", "r");
    if (fp == NULL) {
        perror("fopen data.txt failed");
        return EXIT_FAILURE;
    }

    int id;
    char pwd_buf[MAX_PWD_LEN];
    // 逐行匹配数字+空格+字符序列格式,fscanf自动跳过空格、换行
    while (fscanf(fp, "%d %s", &id, pwd_buf) == 2) {
        root = add(root, id, pwd_buf);
    }

    fclose(fp);
    // 后续可自行添加BST的遍历、查询等逻辑
    printf("数据导入完成\n");
    return EXIT_SUCCESS;
}

关键逻辑说明

  • 字段提取直接使用fscanf格式化匹配,无需手动拆分逐字符读取的内容,处理15万行级别的数据效率足够,且实现简单
  • BST插入以字符序列为key,使用strcmp对比字符串大小实现排序规则
  • 增加了内存分配、文件打开、数据读取的错误校验,避免异常崩溃

内容的提问来源于stack exchange,提问作者Stifff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:54:05