C语言字符串压缩显示
昨天參加WPS的筆試時(shí),有一道題是要求寫一個(gè)函數(shù)實(shí)現(xiàn)字符串壓縮,舉個(gè)例子:
輸入:aaabbccccc
輸出:a3b2c5
當(dāng)時(shí)總想著怎么把輸入的字符串str改寫成輸出那壓縮形式,如果要修改字符串的話需要考慮的問題比較多:
定義一個(gè)int count對重復(fù)的字符進(jìn)行計(jì)數(shù),結(jié)束重復(fù)時(shí)要如何將這個(gè)count轉(zhuǎn)換成char類型加入字符串?個(gè)位數(shù)的重復(fù)比較簡單,如果一個(gè)字符的重復(fù)是十位數(shù)百位數(shù)千位數(shù)呢?
是要重新定義一個(gè)字符串還是在原字符串修改呢?如果是重新定義字符串還要考慮該局部函數(shù)在結(jié)束的時(shí)候數(shù)組也會(huì)跟著被銷毀的問題。如果是在原字符串修改的話在處理無連續(xù)重復(fù)的字符時(shí)也需要謹(jǐn)慎處理。
總之,要考慮的問題如此之多,在這么短的筆試時(shí)間內(nèi),這種費(fèi)時(shí)費(fèi)力的思路應(yīng)該早早放棄才對,而昨天就是對以上的問題進(jìn)行死磕,導(dǎo)致時(shí)間不夠用,結(jié)果很不理想。
接下來是另一種思路,簡單粗暴!題目要求只是一個(gè)輸出,那就直接邊計(jì)數(shù)邊printf輸出好了,完全拋棄對字符串做修改或者新建一個(gè)字符串的老路。
這樣的話代碼就變得十分簡短了:
#include?<stdio.h> #define?N?100void?compress(char?str[]);void?main(void){char?str[N];printf("Enter?a?string:\n");scanf("%Ns",?str);compress(str); }void?compress(char?str[]){int?i?=?0,?cnt?=?1;while(str[i]?!=?'\0'){if(str[i+1]?==?str[i])cnt++;else{printf("%c%d",?str[i],?cnt);cnt?=?1;}i++;}printf("\n"); }測試如下:
這樣或許達(dá)不到在內(nèi)存中的壓縮效果,反正題目中沒要求,或許出題的意圖也只是想要視覺上的壓縮效果而已。
轉(zhuǎn)載于:https://blog.51cto.com/lanchaohuan/1563103
總結(jié)
以上是生活随笔為你收集整理的C语言字符串压缩显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信公众平台开发——在线点歌
- 下一篇: 使用tesseract-ocr破解网站验