В строке имеется несколько слов, разделённых одним или несколькими пробелами. Требуется убрать из текста лишние пробелы: два и более пробела подряд, а также все пробелы в начале и в конце строки.
Входные данные
На вход программе подаётся строка, состоящая не более чем из 255 символов.
Ваш код почти верный, но есть небольшие ошибки. Вот исправленный код:
```cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "";
getline(cin, s);
string result = "";
bool isSpace = false;
for (int i = 0; i < s.size(); i++)
{
if (s != ' '
{
isSpace = false;
result += s;
}
else if (!isSpace)
{
isSpace = true;
result += ' ';
}
}
// Удаление пробелов в начале и в конце строки
while (result.size() > 0 && result[0] == ' '
{
result = result.substr(1);
}
while (result.size() > 0 && result[result.size() - 1] == ' '
{
result = result.substr(0, result.size() - 1);
}
cout << result << endl;
return 0;
}
```
Теперь код работает правильно: убирает лишние пробелы и пробелы в начале и в конце строки.
Пожалуйста имейте ввиду, что этот пользователь забанен
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
getline(cin, s); // Читаем всю строку
string result; // Сюда будем записывать результат без лишних пробелов
bool spaceFound = false; // Флаг, что предыдущий символ был пробелом
// Удаляем пробелы в начале строки (пропускаем их)
size_t start = s.find_first_not_of(' '
if (start == string::npos) { // Если строка состоит только из пробелов
cout << "" << endl;
return 0;
}
// Удаляем пробелы в конце строки
size_t end = s.find_last_not_of(' '
s = s.substr(start, end - start + 1); // Обрезаем пробелы по краям
// Проходим по строке и убираем лишние пробелы внутри
for (char c : s) {
if (c == ' ' {
if (!spaceFound) { // Если предыдущий символ не был пробелом
result += ' ';
spaceFound = true;
}
} else {
result += c;
spaceFound = false;
}
}
На этом основан парсинг - синтаксический разбор текста.
Просматривайте текст в цикле while() до тех пор, пока не встретится символ переноса строки \n или нуль-терминированный символ \0 и в условии if(' ' ищите ANSI-символ пробела, его код - 0x20 или в символьном представлении ' '.
Создаете новую строку, скопировав в нее исходную, до символа пробела, затем повторяете после пробела, но сам пробел не копируете в новую строку