Как вывести все слова из текста, содержащие заданную букву? с++
Допустим мы вводим с клавиатуры текст "how long do humans live on this planet" и символ "p", а как итог получаем, что после выполнения кода в консоль выводит 3 буквы p, но не сами слова.
Формулировка задания: Выбрать и вывести на экран из заданного текста все слова, содержащие заданный символ
Код:
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(0, "");
const int SIZE = 100;
char text[SIZE] = "\0";
char letter[SIZE] = "\0";
cout << "Введите текст\n";
cin.getline(text, SIZE);
cout << "Введите символ\n";
cin.getline(letter, SIZE);
cout << '\n';
for (int i = 0; i < SIZE; i++)
{
if (text[i] == *letter)
{
cout << text[i] << '\n';
}
}
return 0;
}
Прошу дополнить мой код. Заранее спасибо.
Ответы (1 шт):
Оператор ввода >> вводит строку до символа разделителя, так что при каждом вводе массива, вы введете именно одно слово, и будет вам счастье:
//вариант №1
const int SIZE = 100;
char text[SIZE];
cout << "Введите символ\n";
char letter;
cin >> letter;
cout << "Введите текст\n";
while (cin >> text) {
if (strchr(text, letter))
cout << text << '\n';
}
Но, далеко не всегда текст задается из потока ввода. Например строка может быть передана в аргумент функции из другого источника. Тогда будет другой подход.
//вариант№ 1.1
const std::string s = "how longp do humans live on this planet";
const char c = 'p';
size_t pos = s.find(c);
//пока не дошли до конца строки
//то есть такой символ есть
while ( pos != s.npos)
{
size_t first = pos;
//ищем начало слова
while (first && s[first] != ' ')
--first;
//ищем конец слова
pos = s.find(' ', pos + 1);
//если дошли до конца строки
//установим pos как индекс конца строки
if (pos == s.npos)
pos = s.size();
//теперь можем вывести
cout << s.substr(first + 1, pos - first) << '\n';
//если все же это не конец текста
//ищем дальше
if(pos != s.npos)
pos = s.find(c, pos);
}
Тут вариантов решения и программирования можно написать десяток, но решение задачи не дает ответа на конкретный вопрос, потому и бесполезны такие ответы и вопросы(разве что только для вас). Поэтому и этого достаточно для вашего изучения.