字串壓縮

2021-06-19 01:08:00 字數 1761 閱讀 7777

隱約記得這道筆試題,之前在網上看到過一次,感覺應該能做出來,結果第一次嘗試折騰了半天,弄有bug統計kkll這樣的可以但是字元出現連續三次以上的這就不行了,第二天理了一次,用筆畫了畫,2分鐘搞定了。總結:寫程式必須先理清楚思路,再動手敲,不然。。。

原題是這樣的:

通過鍵盤輸入一串小寫字母(a~z)組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。 壓縮規則:

1. 僅壓縮連續重複出現的字元。比如字串"abcbc"由於無連續重複字元,壓縮後的字串還是"abcbc".

2. 壓縮欄位的格式為"字元重複的次數+字元"。例如:字串"***yyyyyyz"壓縮後就成為"3x6yz" 

要求實現函式: 

void stringzip(const char *pinputstr, long linputlen, char *poutputstr); 

【輸入】 pinputstr:  輸入字串

linputlen:  輸入字串長度         

【輸出】 poutputstr: 輸出字串,空間已經開闢好,與輸入字串等長; 

【注意】只需要完成該函式功能演算法,中間不需要有任何io的輸入輸出 

示例 

輸入:「cccddecc」   輸出:「3c2de2c」 輸入:「adef」     輸出:「adef」 輸入:「pppppppp」 輸出:「8p。

這裡是用迴圈做的,還不夠完善,無法統計十五以上的次數,所以用加號(+)暫時代替。

#includeint main(void);

char *pwr = &str[0];

char *p, *mark;

int count = 1;

printf("please input a string:\nbefore:");

scanf("%s", str);

for(p=&str[0];*p != '\0';p++)

*pwr = *p;

pwr++;

}else }

*pwr = '\0';

printf("after:%s\n", str);

return 0;

}

改寫成題中函式介面的:

#include#include#includevoid stringzip(const char *pinputstr, long inputlen, char* poutputstr)

*poutputstr = *p;

poutputstr++;

}else }

*poutputstr = '\0';

}int main(void)

const 保護istr_temp常量指標不被修改,編譯時候第八行會報警告[initialization discards 『const』 qualifier from pointer target type],到這裡終於讀懂原題的意思了,它說別用指標操作,用下標吧。不然給的inputlen引數是為什麼?我好遲鈍..再改為下標操作的:

void stringzip(const char *pinputstr, long inputlen, char* poutputstr)

*poutputstr = pinputstr[i];

poutputstr++;

}else }

*poutputstr = '\0';

}

字串 字串壓縮

標題 字串壓縮 類別字串處理 時間限制 1s記憶體限制 1000kb 問題描述 有一種簡單的字串壓縮演算法,對於字串中連續出現的同乙個英文本元,用該字元加上連續出現的次數來表示 連續出現次數小於3時不壓縮 例如,字串aaaaabbbabaaaaaaaaaaaaabbbb可壓縮為a5b3aba13b4...

字串壓縮

include using namespace std 題目描述 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1.僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcb...

字串壓縮

通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1 僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcbc 2 壓縮欄位的格式為 字元重複的次數 字元 例如 字串 yyy...