Q624353765 发表于 2023-12-5 12:59:52

有关文本类操作

有一段很长的文本,需要每5字符插入一个回车符,我是用一个大循环一个一个插入,但这种方法太耗时间了,有没有一种方法一次插入的,速度要快

Xelloss0618 发表于 2023-12-5 14:17:03

可以试下这个,优化的重点是将分配内存的次数降到最低。


<火山程序 类型 = "通常" 版本 = 1 />

方法 间隔插入指定文本 <公开 静态>
参数 原始文本 <类型 = 文本型 注释 = "所欲插入内容的文本">
参数 结果文本 <类型 = 文本型 注释 = "插入结果返回到此参数">
参数 插入内容 <类型 = 文本型 注释 = "所欲插入的内容" @默认值 = "\r\n">
参数 插入间隔 <类型 = 整数 注释 = "每隔多少个字符插入指定的内容" @默认值 = 5>
{
    清空文本 (结果文本)
    变量 文本长度 <类型 = 整数>
    变量 文本指针 <类型 = 变整数>
    文本长度 = 取文本长度 (原始文本)
    文本指针 = 取文本指针 (原始文本)
    如果 (文本长度 < 插入间隔)
    {
      置文本指针 (结果文本, 文本指针)
      返回
    }
    变量 循环次数 <类型 = 整数>
    循环次数 = 文本长度 / 插入间隔
    置文本预分配字符数 (结果文本, 文本长度 + (循环次数 + 1) * 取文本长度 (插入内容))
    计次循环 (循环次数)
    {
      添加部分文本指针内容 (结果文本, 文本指针, 插入间隔)
      加入文本 (结果文本, 插入内容)
      文本指针 = 文本指针 + 插入间隔 * 2
    }
    如果 (文本长度 % 插入间隔 > 0)
    {
      添加文本指针内容 (结果文本, 文本指针)
    }
}

Q624353765 发表于 2023-12-5 17:44:46

Xelloss0618 发表于 2023-12-5 14:17
可以试下这个,优化的重点是将分配内存的次数降到最低。






速度提高好多倍,小修改了下

承易 发表于 2023-12-5 17:51:24

此时此刻才体现了火山C++的威力

Xelloss0618 发表于 2023-12-5 17:53:45

Q624353765 发表于 2023-12-5 17:44
速度提高好多倍,小修改了下

返回文本型会多复制一次内存,不过看你喜欢了
页: [1]
查看完整版本: 有关文本类操作