插入char *
缓冲区(C字符串)的适当算法应该是什么?
我目前正在使用下面描述的内容以及我用来实现这些功能的函数(来自C库) 这里我说的是C样式字符串,而不是C ++字符串。我不被允许使用它。
这是有效的,但我正在处理大字符串,所以我正在寻找 任何方式来删除tmp和其他任何更好的 替代我正在使用的功能。此外,还有其他任何速度优化,因为我将使用它很多?
答案 0 :(得分:0)
如果要调整目标字符串S2的大小,则根本不需要其他缓冲区。
一种可能性是:
就个人而言,我更愿意分配一个正确大小的新缓冲区,而不是重新分配现有的缓冲区。部分是因为它可以避免在P之后执行字符串部分的双重复制,但主要是为了避免破坏输入字符串,或者只是在没有被malloc分配时崩溃。
对于步骤2,使用void *memmove(void *dest, const void *src, size_t n);
,您需要将范围P:N + 1移动到从P + M开始的新位置,所以:
memmove(S2 + P + M, S2 + P, N - P + 1);
假设目标字符串为9个字符加上1个NUL终止符(N = 9),插入的字符串为2个字符(M = 2),插入位置为7(P = 7),这将移动9 - 7 + 1 =从位置7到位置7 + 2 = 3的3个字节,使位置7和8可以自由地保存要插入的字符串中的2个新字符。