題目來源:http://cs101.openjudge.cn/practice/12556/ 12556:編碼字串
總時間限制: 1000ms 記憶體限制: 65536kB
描述
在資料壓縮中,一個常用的方法是行程長度編碼壓縮。對於一個待壓縮的字串,我們可以依次記錄每個字元及重複的次數。例如,待壓縮的字串為"aaabbbbcbb",壓縮結果為(a,3)(b,4)(c,1)(b,2)。這種壓縮對於相鄰資料重複較多的情況有效,如果重複狀況較少,則壓縮的效率較低。
現要求根據輸入的字串,首先將字串中所有大寫字母轉化為小寫字母,然後將字串進行壓縮。
輸入
一個字串,長度大於0,且不超過1000,全部由大寫或小寫字母組成。
輸出
輸出為編碼之後的字串,形式為:(a,3)(b,4)(c,1)(d,2),即每對括弧內分別為小寫字元及重複的次數,不含任何空格。
範例輸入
aAABBbBCCCaaaaa
範例輸出
(a,3)(b,4)(c,3)(a,5)
-----------------------------------------------------
解題思路
類比題
-----------------------------------------------------
代碼
#include<iostream>#include<vector>#include<string>using namespace std;int main(){string s;cin >> s;int len = s.length(), i = 0;for (i=0; i<len; i++){if (s.at(i) >= 'A' && s.at(i) <= 'Z'){s.at(i) -= 'A' - 'a';}}int cnt = 1;char c = 0;vector<char> vecc;vector<int> veci;vecc.push_back(s.at(0));for (i=1; i<len; i++){if (s.at(i) != s.at(i-1)){vecc.push_back(s.at(i));veci.push_back(cnt);cnt = 1;}else{cnt++;}}veci.push_back(cnt);for (i=0; i<vecc.size(); i++){cout << "(" << vecc.at(i) << "," << veci.at(i) << ")" ;}}