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
相关产品推荐
相关产品推荐

