//字串壓縮、解壓縮
/*時間優先 壓縮:
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個字元。按照...