#include
#include
int main() {
std::string s, word1, word2;
// Ввод данных
std::getline(std::cin, s);
std::cin >> word1 >> word2;
// Поиск позиций слов
size_t pos1 = s.find(word1);
size_t pos2 = s.find(word2, pos1 + word1.length());
// Проверка наличия обоих слов
if (pos1 != std::string::npos && pos2 != std::string::npos) {
// Вычисление начальной позиции и длины подстроки
size_t start = pos1 + word1.length() + 1; // +1 для пропуска пробела после первого слова
size_t length = pos2 - start;
// Извлечение и вывод подстроки
std::cout << s.substr(start, length) << std::endl;
} else {
std::cout << "Одно или оба слова не найдены в строке." << std::endl;
}
return 0;
}
D PМудрец (17849)
5 месяцев назад
Вообще делать word1.length() + 1 не надо и сама по себе программа работает не совсем корректно, так как анализирует не слова а последовательности байтов. Пример данных, которые вызовут некорректное срабатывание:
The caterpillar run to dog
cat
dog
rpillar run to
По хорошему подобные вещи надо делать не при помощи find а при помощи разбиения строки на отдельные поля/токены.
Входные данные:
Со стандартного устройства ввода вводится строка s, соседние слова в которой разделены одним пробелом. В конце строки стоит перевод строки. Во второй и третьей строках идут слова. Длина текста не превышает 1000 символов.
Выходные данные:
Нужно выдать на стандартное устройство вывода требуемую часть строки.
Примеры: