Не работает программа C++

231
01 декабря 2021, 03:40

Программа должна убирать лишние пробелы, посмотрел в отладчике, программа работает вроде норм, но потом где-то ломается и выдает ошибку, если кто-то знает из-за чего и что надо исправить, заранее спасибо.

int main()
{
    setlocale(LC_ALL, "rus");
    string str1("Алексей   Игорь   Валентин   Егор   ");
    string str2;
    int count = str1.size();
    int prb = 0;
    str2.swap(str1);
    for (int i = 0; i < count; i++)
    {
        if (int(str2[i]) == 32 || int(str2[i]) == -50)
        {
            for (int a = i; a < count; a++)
            {
                if (int(str2[a]) != 32 && int(str2[a]) != -50)
                {
                    break;
                }
                prb++;
            }
            for (int d = 0; d < prb - 1; d++)
            {
                str2.erase(i + d, 1);
            }
        }
        prb = 0;
    }
    cout << str2 << endl;
}
Answer 1

Проблема в том, что erase изменяет размер строки, но это не учитывается в условии цикла. Также счетчик внутриннего цикла должен начинаться с i + 1. Еще можно не писать erase в цикле, так как можно просто передать вторым аргументом количество удаляемых символов.
PS. Ваш алгоритм оставляет один пробел после последнего слова.

Вот немного отредактированный код:

#include <iostream>
#include <string>
int main()
{
    std::string str1("Alex    Olya    Bob   ");
    std::string str2 = str1;
    int prb = 0;
    for (int i = 0; i < str2.size(); i++)
    {
        if (str2[i] == ' ')
        {
            for (int a = i + 1; a < str2.size(); a++)
            {
                if (str2[a] != ' ')
                {
                    break;
                }
                prb++;
            }
            str2.erase(i, prb);
        }
        prb = 0;
    }
    if (str2.back() == ' ') // Удаление последнего пробела
        str2.pop_back();
    std::cout << str2 << std::endl;
    return 0;
}
READ ALSO
Трассиврока лучей и мягкие тени, алгоритм генерации лучей внутри конуса (ray tracing + soft shadows)

Трассиврока лучей и мягкие тени, алгоритм генерации лучей внутри конуса (ray tracing + soft shadows)

Решил разобраться в трассировке лучейДля начала думаю все это дело реализовать чисто на процессоре, то есть при помощи обычного C++ кода, а затем...

141
Epoll не до конца читает данные из сокета

Epoll не до конца читает данные из сокета

После определенного количества посланных пакетов (отправляю части файла размером по 128 байт) этот код перестает принимать пакеты от клиентаКак...

178
Проблема с LU-разложением С++

Проблема с LU-разложением С++

Я написал код в соответствии с алгоритмом, но результат неверенСогласно алгоритму, мы должны указать размер матрицы и вручную заполнить...

302
Как запускать gui приложение Qt без консоли?

Как запускать gui приложение Qt без консоли?

Проблема такова : исполняемый файл готового приложения запускается вместе с консолью позадиПараметр "Run in terminal" снят, приложение создано...

113