華為筆試題之字串壓縮
阿新 • • 發佈:2019-02-16
時間:2014.04.09
地點:基地二樓
說明:這些練習儘量按Google C++標準規範編寫,環境 VS2013,語言:C++11
--------------------------------------------------------------------------------
一、題目
通過鍵盤輸入一串小寫字母(a~z)組成的字串。請編寫一個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。 壓縮規則: 1. 僅壓縮連續重複出現的字元。比如字串"abcbc"由於無連續重複字元,壓縮後的字串還是"abcbc". 2. 壓縮欄位的格式為"字元重複的次數+字元"。例如:字串"xxxyyyyyyz"壓縮後就成為"3x6yz" 示例 輸入:“cccddecc” 輸出:“3c2de2c” 輸入:“adef” 輸出:“adef” 輸入:“pppppppp” 輸出:“8p”--------------------------------------------------------------------------------
二、完整程式碼
#include<iostream> #include<string> #include<sstream> #include<map> using namespace std; string StringZip(const string& str); //Precondition: //Postcondition: int main() { string input_str, out_str; cin >> input_str; out_str = StringZip(input_str); cout << out_str << endl; return EXIT_SUCCESS; } string StringZip(const string& str) { char front_char=str[0]-1; string result_str; size_t count=0; stringstream num_string; for (auto ch : str) { if (ch != front_char) { if (count != 0) { num_string << count; if (count!=1) result_str += num_string.str(); result_str += front_char; front_char = ch; count = 1; } else { front_char = ch; ++count; } } else ++count; } num_string << count; if (count != 1) result_str += num_string.str(); result_str += front_char; return result_str; }