C语言中如何使用多分隔符实现字符串拆分?
问题分析
你现有代码的核心问题是strtok仅使用#作为唯一分隔符,只能将字符串按#切割为32+-、3、2-、3、3几个片段,无法处理拆分连续数字、将数字和后续非数字符号绑定的需求。
解决方案
推荐直接逐字符遍历字符串处理,逻辑更灵活可控,代码实现如下:
#include <stdio.h> #include <ctype.h> int main(void) { char string[50] = "32+-#3#2-#3#3"; int i = 0; while (string[i] != '\0') { // 跳过分隔符# if (string[i] == '#') { i++; continue; } // 当前是数字,先输出数字 if (isdigit(string[i])) { putchar(string[i]); i++; // 后面跟的是非数字非#的符号,连续输出直到遇到数字或#或结尾 while (string[i] != '\0' && string[i] != '#' && !isdigit(string[i])) { putchar(string[i]); i++; } // 换行分割每个项 putchar('\n'); } else { // 非数字非#的前置异常字符直接跳过,可根据需求调整逻辑 i++; } } return 0; }
运行输出
3 2+- 3 2- 3 3
完全符合预期拆分结果,即使遇到多位数字、数字后绑定多个符号的场景也能正常处理。
内容的提问来源于stack exchange,提问作者Miguel Barra
相关产品推荐
相关产品推荐

