某公司的一道編程題(好像不提公司名比較好,不然總感覺怪怪的):對輸入字符串進行壓縮,輸入"aaabcccdde",輸出"3ab3c2de",即對連續出現的字符進行壓縮。
如果數據結構是數組的話,主要是要解決兩個問題,一是統計重復的字符,二是確定數組壓縮后每個元素在數組中所處的位置。
可以用一個指針遍歷數組,另一個指針標記存儲位置。
(現在解決問題還是處於暴力解題階段,性能魯棒性什么的還都沒考慮,一般也只懂得循環循環,得提高了!)
void string_compress( char s[] )
{
int i, j;
int count;
int len = strlen( s );
if( s == NULL )
return;
for( i = 0, j = 0; i < len; i++ ) /*j用於標記存儲位置*/
{
count = 1; /*在遍歷過程中統計每個字符連續出現的位置*/
while( s[i] = s[i + 1] )
{
i++;
count++;
}
if( count > 1 )
{
s[j] = count + '0'; /*將整型數據count轉換為字符*/
j++; /*位置j存數字,j + 1存字符*/
s[j] = s[i];
}
else
s[j] = s[i];
j++;
}
s[j] = '\0'; /*字符串末尾加結束符*/
}