C/C++

Помогите с решением задачи С++

#include <iostream>
#include <string>
#include <vector>

using namespace std;
int main() {
string query;
getline(cin, query); // получаем данные с ввода

vector<string> words; // создаем вектор
string buffer;

for (int i = 0; i < query.size(); ++i) {
if (query[i] == ' ') {
if (buffer.size() != 0) { // вот тут достаточно ввести проверку на наполненность буфера
words.push_back(buffer); // заносим данные из буфера в вектор
buffer = "";
} // очищаем буфер
}
else {
buffer += query[i]; // заносим данные ввода, из query в буфер
}
}

words.push_back(buffer); // заполняем вектор, если не было пробела

for (string word : words) {
cout << '[' << word << ']' << endl;
}

}

Чтобы не добавлять в вектор лишнего, достаточно перед вставкой в вектор проверять word на пустоту и добавлять элемент, только если строка не пуста.
Не забудьте сделать проверку перед добавлением слов как внутри цикла, так и при добавлении последнего слова.

Пишет Возможные проблемы:
- Вы неправильно обрабатываете случай 0 слов
- Неправильно обрабатываются примеры из условия задачи
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int main() {
string query;
getline(cin, query);
istringstream iss(query);
vector<string> words;
string buffer;
while (iss >> buffer) words.push_back(buffer);
for (const string& word : words) cout << '[' << word << "]\n";
}
Сергей Сергей
Сергей Сергей
84 686
Лучший ответ
#include
#include
#include

using namespace std;

int main() {
/* объявляем переменную для хранения строки вводимой пользователем */
string query;
/* считываем строку целиком */
getline(cin, query);

/* объявляем вектор строк для хранения слов */
vector words;
/* объявляем строку для хранения слова */
string word;
/* начинаем цикл от 0 до размера строки (проходим посимвольно по всей строке) */
for (char c : query) {
/* условие на выполнение блока:
* символ это пробел */
if (c == ' ') {
if (!word.empty()) {
/* добавляем слово в конец вектора слов */
words.push_back(word);
/* присваиваем переменной пустую строку, т. е. начинаем новое слово */
word = ""s;
}
/* условие на выполнение блока (когда все условия выше - не верны):
* символ это не пробел (обратное условие) */
} else {
/* добавляем символ к строке.
* Этим блоком мы собираем слово в переменной word */
word += c;
}
}
if (!word.empty()) {
/* добавляем последнее слово word в конец вектора words */
words.push_back(word);
}

/* проходим по всем словам из вектора слов */
for (string word : words) {
/* выводим слово между [ и ] */
cout << '[' << word << ']' << endl;
}
}