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

C++如何拆分表达式字符串并将结果存储到struct结构体中

字符串拆分存结构体实现思路

1. 定义匹配需求的结构体

不需要用数组存储的场景下,单条表达式直接设置两个字符串字段即可;如果有多个表达式要批量存储,可以用链表结构体实现,全程不需要依赖数组:

// 单条表达式的存储结构体
typedef struct {
    char *left_part;  // 存储"6="这类左侧带等号的内容
    char *right_expr; // 存储"3+3"这类右侧表达式内容
} ExpressionItem;

// 多组数据不用数组的话,用链表结构体存储
typedef struct ExpressionNode {
    ExpressionItem data;
    struct ExpressionNode *next;
} ExpressionNode;

2. 读取txt文件内容

按行读取文件内的字符串,过滤空行、非法格式行后再做拆分处理即可。

3. 核心拆分逻辑

  • 遍历字符串找到第一个=字符的下标位置
  • 拆分时左侧内容从字符串开头截取到=位置+1,把等号包含到左侧
  • 右侧内容从=的下一个字符位置截取到字符串末尾

C语言实现拆分的示例代码参考:

void split_expression(const char *str, ExpressionItem *item) {
    // 找等号位置
    char *equal_pos = strchr(str, '=');
    if (equal_pos == NULL) {
        // 格式非法的处理逻辑可自行补充
        item->left_part = NULL;
        item->right_expr = NULL;
        return;
    }
    // 截取左侧(包含等号)
    int left_len = equal_pos - str + 1;
    item->left_part = (char*)malloc(left_len + 1);
    strncpy(item->left_part, str, left_len);
    item->left_part[left_len] = '\0';
    // 截取右侧表达式
    int right_len = strlen(equal_pos + 1);
    item->right_expr = (char*)malloc(right_len + 1);
    strcpy(item->right_expr, equal_pos + 1);
    item->right_expr[right_len] = '\0';
}

4. 最终存储

如果只有单条表达式,直接给ExpressionItem实例赋值即可;如果有多条,新建ExpressionNode链表节点挂载到链表上即可,全程不需要用到数组存储。

注意事项

  • 动态申请的内存使用完后要记得释放,避免内存泄漏
  • 如果表达式存在多个=的情况,可以根据业务需求调整为取最后一个等号,或者直接判定为格式非法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:39:03