隱約記得這道筆試題,之前在網上看到過一次,感覺應該能做出來,結果第一次嘗試折騰了半天,弄有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...