Вопрос по строкам C++

Рейтинг: -1Ответов: 1Опубликовано: 30.03.2023
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{

    string a="8888888888888888888888888888888888888888888888888888888888888888888";

    while (a.find("222")!=-1 || a.find("888")!=-1) {
        if (a.find("222") != -1) {
            a.replace(a.begin(), a.end(), '222', '8');
        }
        else {
            a.replace(a.begin(), a.end(), '888', '2');
        }
    }

    cout << a;

    return 0;
}

не могу понять почему ничего не выводи, само задание: Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.

А)  заменить (v, w).

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды

заменить (111, 27)

преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

Б)  нашлось (v).

Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка

исполнителя при этом не изменяется.

 Цикл

    ПОКА условие

        последовательность команд

    КОНЕЦ ПОКА

 выполняется, пока условие истинно.

 В конструкции

    ЕСЛИ условие

        ТО команда1

        ИНАЧЕ команда2

    КОНЕЦ ЕСЛИ

 выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 68 идущих подряд цифр 8? В ответе запишите полученную строку.

 НАЧАЛО

 ПОКА нашлось (222) ИЛИ нашлось (888)

    ЕСЛИ нашлось (222)

        ТО заменить (222, 8)

        ИНАЧЕ заменить (888, 2)

    КОНЕЦ ЕСЛИ

 КОНЕЦ ПОКА

 КОНЕЦ

Ответы

▲ 1

Вероятно, вы хотели написать что-то вроде

string a="8888888888888888888888888888888888888888888888888888888888888888888";

size_t p222, p888;
while ((p222 = a.find("222")) != a.npos ||
       (p888 = a.find("888")) != a.npos)
{
    if (p222 != a.npos)
        a.replace(p222, 3, "8");
    else
        a.replace(p888, 3, "2");
}

cout << a;

Ну, а последовательность получающихся при этом строк имеет такой вид:

28888888888888888888888888888888888888888888888888888888888888888
228888888888888888888888888888888888888888888888888888888888888
2228888888888888888888888888888888888888888888888888888888888
88888888888888888888888888888888888888888888888888888888888
288888888888888888888888888888888888888888888888888888888
2288888888888888888888888888888888888888888888888888888
22288888888888888888888888888888888888888888888888888
888888888888888888888888888888888888888888888888888
2888888888888888888888888888888888888888888888888
22888888888888888888888888888888888888888888888
222888888888888888888888888888888888888888888
8888888888888888888888888888888888888888888
28888888888888888888888888888888888888888
228888888888888888888888888888888888888
2228888888888888888888888888888888888
88888888888888888888888888888888888
288888888888888888888888888888888
2288888888888888888888888888888
22288888888888888888888888888
888888888888888888888888888
2888888888888888888888888
22888888888888888888888
222888888888888888888
8888888888888888888
28888888888888888
228888888888888
2228888888888
88888888888
288888888
2288888
22288
888
2