华为笔试题之字符串压缩

来源:互联网 发布:java b2b 开源 编辑:程序博客网 时间:2024/06/06 00:22

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


0 0
原创粉丝点击