0

私がしなければならない CS プロジェクトの RLE 圧縮および解凍メソッドを作成したいと考えています。問題はロジックではなく、C++ のノウハウです。私が現在学校で学んでいるのは Python だけなので、このプロジェクトを Python でやってみましたが、とても簡単でした...

私は C++ をよく読めるようになる予定ですが、今夜は十分な時間がありません。同等の C++ コードを理解できれば、その言語をより快適に使用できるようになるので、助けを求めたいと思っています。

次の python コードを C++ の同等のコードに変換するのを手伝ってくれる人はいますか?

# compresses data using RLE compression
def compress(data):
    letter_counter = 1
    new_data = []
    for i in range(len(data)):
        try:
            # if the element is the same as the next one
            if data[i] == data[i + 1]:
                letter_counter += 1 
            # if different element than previous index                
            else:
                new_data.append(str(letter_counter) + data[i])
                letter_counter = 1  # reset the letter count
        except IndexError:  # when the index is out of range (no more elements)
            new_data.append(str(letter_counter) + data[i])
    return new_data
data = ['w', 'w', 'w', 'w', 'w', 'b', 'b', 'b', 'c', 'd', 'e', 'e']
data2 = ['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w']
return compress(data)  # prints ['5w', '3b', '1c', '1d', '2e']
return compress(data2)  # prints ['14w']
4

2 に答える 2

1
#include<iostream>
#include<string>
#include<sstream>

using namespace std;

string compress(string data) {
    int letter_counter = 1, i=0;
    ostringstream new_data;
    for (i; i<data.length()-1; i++) {
        if (data[i] == data[i+1]) {
            letter_counter += 1;
        } else {
            new_data<<letter_counter;
            new_data<<data[i];
            letter_counter = 1;
        }
    }
    new_data<<letter_counter;
    new_data<<data[i];

    return new_data.str();
}

int main() {
    string data = string("wwwwwbbbcdee");
    string data2 = string("wwwwwwwwwwwwww");
    cout << compress(data) <<endl;
    cout << compress(data2) <<endl;
}

これを C++ で行う簡単な方法を次に示します。文字配列を文字列として扱い、stringstream を使用して数値を文字列に簡単に挿入します。

結局のところ、他のポスターは正しいです。C++ を学習する最善の方法は、自分で試してみて、問題が発生したときに他の人に尋ねることです。www.cplusplus.com は優れたリソースです。

于 2013-03-16T08:54:30.937 に答える
0

ちなみに、Pythonは大幅に改善される可能性があります。

from itertools import groupby
print ['{}{}'.format(len(list(g)), k) for k, g in groupby(data)]
于 2013-03-16T04:52:13.913 に答える