Программа должна убирать лишние пробелы, посмотрел в отладчике, программа работает вроде норм, но потом где-то ломается и выдает ошибку, если кто-то знает из-за чего и что надо исправить, заранее спасибо.
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;
}
Проблема в том, что 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;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей