1

Тема: Отримання субрядків із рядка

Потрібно отримати й обробити субрядок заданої довжини.
Роблю ось так:

    std::string fix_text { "" };
    for (unsigned long i = 0; i < bits.size(); i += 3) {
        std::string triple = bits.substr(i, i + 3);
        std::cout << triple << std::endl;
        if (std::count(triple.begin(), triple.end(), '1') > std::count(triple.begin(), triple.end(), '0')) {
            fix_text.push_back('1');
        } else {
            fix_text.push_back('0');
        }
    }

Але в змінній triple чомусь замість лише трійки символів ось таке:
000
111111
111000111
000111000000
111000000000000
000000000000111111
000000000111111000000
000000111111000000111000
000111111000000111000111000
111111000000111000111000111111
111000000111000111000111111111111
000000111000111000111111111111000000
000111000111000111111111111000000111
111000111000111111111111000000111
000111000111111111111000000111
111000111111111111000000111
000111111111111000000111
111111111111000000111
111111111000000111
111111000000111
111000000111
000000111
000111
111

Чому значення накопичуються, я ж кожного разу оголошую наново цю змінну?

2

Re: Отримання субрядків із рядка

А який другий аргумент метода substr?

Подякували: Teg Miles1

3

Re: Отримання субрядків із рядка

koala написав:

А який другий аргумент метода substr?

Дійсно, переплутав із ітераторами, а в substr інший підхід.

4

Re: Отримання субрядків із рядка

То, може, опишете цей підхід для інших читачів нашого форуму?

5

Re: Отримання субрядків із рядка

А взагалі жахливий спосіб написати

for (unsigned long i = 0; i < bits.size(); i += 3)
    fix_text.push_back(bits[i]==bits[i+1] ? bits[i] : bits[i+2]);

6

Re: Отримання субрядків із рядка

koala написав:

А взагалі жахливий спосіб написати

for (unsigned long i = 0; i < bits.size(); i += 3)
    fix_text.push_back(bits[i]==bits[i+1] ? bits[i] : bits[i+2]);

Я ще не звик до таких жахливих способів:), окрім того не розумію чому порівнюються лише суміжні біти.

7

Re: Отримання субрядків із рядка

Не біти, а символи.
Їх там усього 3. Якщо перші два однакові - значить, це і є найчастіший. Якщо різні - то той з них, хто збігається з третім, найчастіший, а значить, третій теж найчастіший.

Подякували: Teg Miles1