时间: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;
}