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

C语言中将逗号换行分隔字符串高效转换为二维数组的方法

高效转换CSV格式字符串为二维数组的方案

你原来的思路需要多次遍历字符串统计行列数,确实存在优化空间,仅需一次遍历即可完成全部转换,时间复杂度为O(n)(n为字符串总长度),不需要提前预分配固定容量的数组,用动态容器暂存内容即可,具体实现逻辑如下:

  • 初始化3个临时容器:外层结果数组存储所有行数据、内层当前行数组存储正在处理的单行元素、临时字符缓存存储正在拼接的单个元素内容
  • 从左到右逐个遍历字符串的每一个字符:
    • 遇到逗号,时:将临时字符缓存的内容作为单个元素推入当前行数组,清空临时字符缓存
    • 遇到换行符\n时:先将临时字符缓存的内容推入当前行数组,再将整个当前行数组推入结果数组,同时清空临时字符缓存和当前行数组
    • 普通字符直接追加到临时字符缓存末尾
  • 遍历结束后执行收尾操作:将剩余的临时字符缓存内容推入当前行数组,再将当前行数组推入结果数组(处理最后一行末尾没有换行符的情况)
  • 如果需要将元素转换为数值等其他类型,可在元素推入数组时同步完成,无需额外遍历

以下是Python语言的实现示例:

def str_to_2d_array(input_str: str) -> list:
    result = []
    current_row = []
    current_item_buffer = []
    for char in input_str:
        if char == ",":
            current_row.append("".join(current_item_buffer))
            current_item_buffer.clear()
        elif char == "\n":
            current_row.append("".join(current_item_buffer))
            result.append(current_row.copy())
            current_item_buffer.clear()
            current_row.clear()
        else:
            current_item_buffer.append(char)
    # 处理最后一行的剩余内容
    if current_item_buffer or current_row:
        current_row.append("".join(current_item_buffer))
        result.append(current_row)
    return result

# 测试用例
test_str = "A,B,C\n1,2,3\n,4,9,6"
print(str_to_2d_array(test_str))
# 输出结果:[['A', 'B', 'C'], ['1', '2', '3'], ['', '4', '9', '6']]

如果使用的是C++、Java等强类型语言,要求最终输出固定大小的二维数组,也可以在单次遍历过程中同步统计行数和最大列数,遍历完成后直接用暂存的元素生成固定数组即可,最多仅需一次遍历,比先统计维度再填充的方案效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:39:02