我试图弄清楚如何做到这一点,但似乎无法理解它。
我所拥有的是一个字符数组,其中包含一些字符串,包括每个字符串末尾的空值。
像这样:
我希望能够合并所有数据并在最后有一大块可用空间,但我还需要在每个字符串的末尾保存空值。
你会怎么做?
我试图弄清楚如何做到这一点,但似乎无法理解它。
我所拥有的是一个字符数组,其中包含一些字符串,包括每个字符串末尾的空值。
像这样:
我希望能够合并所有数据并在最后有一大块可用空间,但我还需要在每个字符串的末尾保存空值。
你会怎么做?
我假设您有某种列表,指示每个字符串的开始和结束位置:
struct Node {
int startOffset;
int size; // includes trailing zero;
// (not really needed: can search for it with strlength)
};
并且您想编写一个函数,给定vector<Node>
上述 a 和带有字符串的 char 数组(让我们调用它chars
),将字符串随机排列,以便对于第 i 个节点,nodes[i].startOffset + nodes[i].size == nodes[i+1].startOffset
您可以执行以下操作(假设第 0 个节点位于startOffset
0,并且节点向量按 排序startOffset
):
Node prev = nodes[0];
for (int i = 1; i<nodes.length(); i++) {
Node n = nodes[i];
int targetOffset = prev.startOffset + prev.size;
memmove(chars + targetOffset, chars + n.startOffset, n.size);
n.startOffset = targetOffset;
prev = n;
}
没有什么可以阻止您一个接一个地复制包括空字符在内的所有字符串。您可以用双空值结束整个序列。唯一的问题是您被迫按顺序访问所有字符串。如果这是一个问题,您可以使用存储空间的开头创建一个指向所有字符串开头的指针数组。这一切都取决于你想做什么。
将每个带有'\0'的字符串一个一个放入一个数组中,然后用另一个数组保存每个'\0'的索引