Вывести на экран все слова, которые составляют заданный текст (слова
могут разделяться одним разделителем: запятой, точкой, тире,
вопросительный знак и т. д.)..
написать программу надо на С++ помогите пожалуйста
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");
}
#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");
}
Вам понадобится библиотека <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'.
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'.
Похожие вопросы
- Помогите пожалуйста написать программу на Си
- Помоги пожалуйста с программой в С++
- Помогите пожалуйста написать программу!
- Помоги пожалуйста написать программу на C++
- Помогите пожалуйста написать программу на С++
- Здравствуйте! Помогите, пожалуйста, с программой С++
- Помогите, пожалуйста, написать программу по нижеописанной задаче!
- Помогите пожалуйста решить программу на языке СИ!!!
- Помогите пожалуйста написать программу небольшую в C++. Одномерный массив
- Помогите пожалуйста написать программу, реализующую десять генераторов псевдослучайных чисел.СИ!!!!
if ((dPos = find_first_of(delimiters, dPos)) == std::string::npos) break;
или даже использовать обратное условие в заголовке цикла
while ((dPos = find_first_of(delimiters, dPos)) != std::string::npos)
Например, вызов getline(std::cin, str, '\033'); позволит вводить текст до нажатия клавиши «Esc» (клавиша «Enter» будет только переводить в начало следующей строки, но ввод не закончит).