文字壓縮有很多種方法,這裡我們只考慮最簡單的一種:把由相同字元組成的乙個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如ccccc
就用5c
來表示。如果字元沒有重複,就原樣輸出。例如aba
壓縮後仍然是aba
。
解壓方法就是反過來,把形如5c
這樣的表示恢復為ccccc
。
本題需要你根據壓縮或解壓的要求,對給定字串進行處理。這裡我們簡單地假設原始字串是完全由英文本母和空格組成的非空字串。
輸入第一行給出乙個字元,如果是c
就表示下面的字串需要被壓縮;如果是d
就表示下面的字串需要被解壓。第二行給出需要被壓縮或解壓的不超過 1000 個字元的字串,以回車結尾。題目保證字元重複個數在整型範圍內,且輸出檔案不超過 1mb。
根據要求壓縮或解壓字串,並在一行中輸出結果。
c
ttttthhiiiis isssss a tesssst caaaa as
5t2h4is i5s a3 te4st ca3a as
d
5t2h4is i5s a3 te4st ca3a as10z
ttttthhiiiis isssss a tesssst caaaa aszzzzzzzzzz
其實也挺簡單的,沒什麼好說的地方。需要注意的乙個坑就是相同的字母可能會大於等於10,解壓或者壓縮的時候需要關注一下。結合**看一看注釋就可以了。邏輯寫的有些麻煩了,小姐姐的**邏輯更為簡潔。
#include#include#includeusing namespace std;
string compress(string s)
string temp = "";
int num = cnt;
for(int m = 0; num > 0; m++)
//壓縮該部分字串
s.erase(i + 1, cnt - 1);
reverse(temp.begin(), temp.end());
s.insert(i, temp);
i++;
} }return s;
}string decompress(string s)
ch = s[j];
//轉化為int
ostringstream os;
os << num;
istringstream is(os.str());
is >> cnt;
//解壓該部分字串
s[i] = s[i + 1];
s.erase(i, j - i + 1);
s.insert(i, cnt, ch);
i = i + cnt - 1;
} }return s;
}int main()
1078 字串壓縮與解壓
文字壓縮有很多種方法,這裡我們只考慮最簡單的一種 把由相同字元組成的乙個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。解壓方法就是反過來,把形如 5c 這樣的表示恢復為 ccccc。本題需...
1078 字串壓縮與解壓
1078 字串壓縮與解壓 20 分 文字壓縮有很多種方法,這裡我們只考慮最簡單的一種 把由相同字元組成的乙個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。解壓方法就是反過來,把形如 5c ...
1078 字串壓縮與解壓
文字壓縮有很多種方法,這裡我們只考慮最簡單的一種 把由相同字元組成的乙個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。解壓方法就是反過來,把形如 5c 這樣的表示恢復為 ccccc。本題需...