Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача c++ Часть строки

upbsoeu1 upbsoeu1 Ученик (233), на голосовании 4 месяца назад
Дана строка s и два слова из неё. Нужно выдать часть строки, находящуюся между этими словами.

Входные данные:
Со стандартного устройства ввода вводится строка s, соседние слова в которой разделены одним пробелом. В конце строки стоит перевод строки. Во второй и третьей строках идут слова. Длина текста не превышает 1000 символов.

Выходные данные:
Нужно выдать на стандартное устройство вывода требуемую часть строки.

Примеры:
Голосование за лучший ответ
GGG Просветленный (35944) 5 месяцев назад
 #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 а при помощи разбиения строки на отдельные поля/токены.
Никнейм Ученик (179) 4 месяца назад
На роботизированное не понимаю
Похожие вопросы