C/C++

Помогите пожалуйста с программой

Вывести на экран все слова, которые составляют заданный текст (слова
могут разделяться одним разделителем: запятой, точкой, тире,
вопросительный знак и т. д.)..
написать программу надо на С++ помогите пожалуйста
#include <iostream>
#include <string>
#include <regex>
#include <vector>
using namespace std;
vector<string> words(const string& str, const string& signs) {
const regex re{ signs };
const sregex_token_iterator iter{ str.begin(), str.end(), re, -1 };
return { iter, {} };
}
int main() {
system("chcp 1251 > nul");
cout << "Введите строку: ";
string str;
getline(cin, str);
const string re(R"([ ,.;:!?\t]+)");
auto result = words(str, re);
for (const auto& word : result) cout << word << '\n';
cout.put('\n');
system("pause");
}
ДШ
Даниил Шохирев
66 153
Лучший ответ
   Вам понадобится библиотека <string>. Воспользуйтесь методом std::string::find_first_of().

1. Соберите весь заданный текст в строку C++ (объект класса string).
2. Объявите строку из возможных разделителей, указав каждый только один раз. Например, так: string delimiters = ",.-?; :|";
3. Объявите переменную для хранения позиции каждого разделителя в исходной строке, например, int dPos = 0;
4. В цикле:
  ◉ Найдите в исходной строке очередной разделитель. Для этого вызовите метод find_first_of() с двумя параметрами: 1) строка разделителей, 2) начальная позиция поиска в строке. Образец: dPos = str.find_first_of(delimiters, dPos);
  ◉ Если строка закончилась, то выйти из цикла.
  ◉ В заданной строке заменить найденный разделитель своим символом, например, '\t' или '\n'. Образец: str[dPos] = '\t';
   На этом цикл закончен.
5. Вывести изменённую строку на экран.

   Если разделители заменяются символом '\n', то все слова выводятся в столбик. Если текст не помещается на экране, и Вас это не устраивает, то вместо '\n' можно использовать '\t'.
Федор Юрьев
Федор Юрьев
16 172
Федор Юрьев ◉ Условие выхода из цикла — достижение конца строки — можно проверить так:

if ((dPos = find_first_of(delimiters, dPos)) == std::string::npos) break;

или даже использовать обратное условие в заголовке цикла

while ((dPos = find_first_of(delimiters, dPos)) != std::string::npos)
Федор Юрьев Кстати, если Вы хотите ввести исходную строку с помощью функции getline(), обратите, пожалуйста, внимание на вариант этой функции с тремя параметрами: так можно за один раз ввести многострочный текст.
Например, вызов getline(std::cin, str, '\033'); позволит вводить текст до нажатия клавиши «Esc» (клавиша «Enter» будет только переводить в начало следующей строки, но ввод не закончит).
Федор Юрьев  ✓ ПРОГРАММА ПОЛУЧАЕТСЯ ОЧЕНЬ ЛАКОНИЧНОЙ!