2015-04-14 33 views
-2

我想弄清楚如何做到這一點,但似乎無法將其包裹在它周圍。在C++中對數組進行碎片整理

我所擁有的是一個字符串數組,其中包含一些字符串,包括每個字符串末尾的空字符串。

像這樣:

Example

我希望能夠整合所有數據,並在年底有一個大塊的自由空間,但我還需要保存空末的每個字符串。

你會如何做到這一點?

+2

爲什麼不只是複製的文本輸出在這裏?您不需要發佈圖像 –

+0

使用'strcat()'或'strncat()' – Bregalad

+2

因爲OP想要在字符串末尾保留'\ 0'。 – doron

回答

0

沒有什麼能阻止你一個接一個地複製包括空字符在內的所有字符串。您可以用雙null結束整個序列。 唯一的問題是,你然後強制按順序訪問所有的字符串。如果這是一個問題,您可以使用存儲空間的開始創建一個指向所有字符串開頭的指針數組。這完全取決於你想要做什麼。

0

一個把每個字符串「\ 0」在數組中一個,然後用另一個數組保存每個「\ 0」的指數

0

我假設你有某種名單的說明,其中每個字符串開始和結束:

struct Node { 
    int startOffset; 
    int size; // includes trailing zero; 
      // (not really needed: can search for it with strlength) 
}; 

你想寫,鑑於上述,並與串字符數組的vector<Node>功能(允許調用它chars),慢騰騰串左右,這樣,對於ith節點,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; 
}