1. 程式人生 > >華為筆試題之字串壓縮

華為筆試題之字串壓縮

時間: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;
}