字符串编解码

问题描述

Design an algorithm to encode a list of strings to a string. The encoded string is then sent over the network and is decoded back to the original list of strings.

Machine 1 (sender) has the function:
string encode(vector<string> strs) { // ... your code return encoded_string; }
Machine 2 (receiver) has the function:
vector<string> decode(string s) { //... your code return strs; }

So Machine 1 does:
string encoded_string = encode(strs);
and Machine 2 does:
vector<string> strs2 = decode(encoded_string);
strs2 in Machine 2 should be the same as strs in Machine 1.

Implement the encode and decode methods.

Note: The string may contain any possible characters out of 256 valid ascii characters. Your algorithm should be generalized enough to work on any possible characters. Do not use class member/global/static variables to store states. Your encode and decode algorithms should be stateless. Do not rely on any library method such as eval or serialize methods. You should implement your own encode/decode algorithm.

解决方法

#include <iostream>

string encode(vector<string>& strs) {
    string res;
    for (auto it = strs.begin(); it != strs.end(); ++it) {
        res += to_string(it->size()) + "#";
        res += *it;
    }
    return res;
}

vector<string> decode(string& s) {
    vector<string> res;
    int index = 0;
    while (index < s.size()) {
        int len_end = s.find_first_of("#", index);
        string len_str = s.substr(index, len_end-index);
        int len = atoi(len_str.c_str());
        string str = s.substr(len_end+1, len);
        res.push_back(str);
        index = len_end + 1 + len;
    }
    return res;
}

template<class T>
void print(vector<T>& v) {
    for (auto it = v.begin(); it != v.end(); ++it) {
        cout << *it << endl;
    }
}

int main() {
    std::cout << "Hello World!\n";
    vector<string> raw = {"aaa", "bbbb", "ccccc"};
    string encode_str = encode(raw);
    std::cout << encode_str << endl;
    vector<string> v = decode(encode_str);
    print(v);
}

输出

3#aaa4#bbbb5#ccccc
aaa
bbbb
ccccc
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 大扫除 年前打扫卫生,只是做了表面,重点放在了家里各处的擦拭。 年后的打扫,重点放在物品的整理。今天先生主动承担整...
    品茶轩pcx阅读 254评论 2 7
  • 去年春天,女儿的学校里号召植树,老婆去集市上买了一把铁锨和一株香椿树苗,我们一块栽种上了。后来我又买了两株无花果树...
    放纵天涯阅读 205评论 0 0
  • 43 感恩一早的太阳,带给我温暖,透着希望。 感恩自己,在实修中越来越能活在当下,去感受当下的那一份充实,自在。 ...
    疗愈师李玉阅读 169评论 0 2