字串壓縮 解壓縮(時間優先)

2021-07-26 19:54:31 字數 2054 閱讀 8243

//字串壓縮、解壓縮

/*時間優先 壓縮:

1、得到字串長度 利用長度申請一片新的記憶體newstr來儲存

2、遍歷源字串,如果不是'\0'進入迴圈

宣告 * pindex 來記錄當前 字元

repetitionlength 記錄重複的字元次數

3、* pindex 與 *(pindex+1) 進行比較

如果相等

repetitionlength++ 返回執行3

4、判斷repetitionlength的值

①如果==0

那麼不是相同的字元 *pnew++ = *p++;

②是存在相同字元

*pnew = repetitionlength + 1 + '0';//+ '0' 是為了將轉換為數字的char ; +1是因為本身也要計算在其中

*(pnew + 1) = *p;//儲存這個相同的字元,也就是5a

增量 回到 2

pnew = pnew + 2;

p = p + repetitionlength + 1;

5、源字串走完 結束迴圈,重新申請記憶體,節約記憶體

strlength = strlen(newstr);

newstr = _recalloc(newstr, strlength+1,sizeof(char));

時間優先 解除壓縮:

跟上面差不多,就是得到指標判斷length

*/

#include #include #include #include //字串壓縮、解壓縮

/* 時間優先 壓縮:

1、得到字串長度 利用長度申請一片新的記憶體newstr來儲存

2、遍歷源字串,如果不是'\0'進入迴圈

宣告 * pindex 來記錄當前 字元

repetitionlength 記錄重複的字元次數

3、* pindex 與 *(pindex+1) 進行比較

如果相等

repetitionlength++ 返回執行3

4、判斷repetitionlength的值

①如果==0

那麼不是相同的字元 *pnew++ = *p++;

②是存在相同字元

*pnew = repetitionlength + 1 + '0';//+ '0' 是為了將轉換為數字的char ; +1是因為本身也要計算在其中

*(pnew + 1) = *p;//儲存這個相同的字元,也就是5a

增量 回到 2

pnew = pnew + 2;

p = p + repetitionlength + 1;

5、源字串走完 結束迴圈,重新申請記憶體,節約記憶體

strlength = strlen(newstr);

newstr = _recalloc(newstr, strlength+1,sizeof(char));

時間優先 解除壓縮:

跟上面差不多,就是得到指標判斷length

*/char * compress(char *str)

if (repetitionlength==0)//不是相同的字元

else

} //realloc函式用於修改乙個原先已經分配的記憶體塊的大小。

strlength = strlen(newstr);

newstr = _recalloc(newstr, strlength+1,sizeof(char));

return newstr;

}char * decompress(char *str)

p = p + 2;//前進字元

學 Lazarus 字串壓縮 解壓縮

背景 1 原有c 開發的wince系統 webservice 2 客戶說wince上的終端程式執行速度慢,我也說慢 3 希望改造乙個wince上的終端程式,因為熟悉delphi所以lazarus 4 lazarus匯入的webservice 我看不明白,還涉及到資料型別轉換神馬的,決定放棄webse...

字串的解壓縮

問題描述 對字串進行解壓縮 例如 5w1g2b wwwwwgbb 解決方案 1.將輸入字串分別為集合5w 1g 2b,每個集合由乙個數字和乙個字元構成 2.從尾到頭讀取字串,當遇到乙個字元的時候,儲存下來 當遇到乙個數字的時候,我們開始建立乙個數,直到遇到下乙個字元 3.當遇到下乙個字元之前,我們應...

字串編碼解壓縮演算法

前幾天,有乙個學c的小夥伴和我交流乙個問題,問題他是這麼說的 傳入乙個字串,格式要求如下 ep a2d3b4c1d2 那麼將這個字串解壓的結果應為 aadddbbbbcdd 規則就是,必須滿足,字串的第乙個是字母,可以大寫也可以小寫,第二個為數字,範圍為1 9,解壓的長度不得超過1000個字元。按照...