1 / 1 / 0
Регистрация: 11.02.2019
Сообщений: 23

Вывод строки между первым и последним вхождением

03.01.2020, 21:43. Показов 9510. Ответов 31

Студворк — интернет-сервис помощи студентам
Добрый вечер, помогите пожалуйста разобраться, есть задание:

Дана строка S и 2 слова из нее. Нужно выдать часть строки, находящуюся между самым
первым вхождением первого слова и самым последним второго.
Input
Со стандартного устройства ввода вводится строка, соседние слова в которой разделены
одним пробелом. В конце строки стоит перевод строки. Во второй и третьей строках идут
слова. Гарантируется, что первое слово встретится в строке раньше второго. Длина текста
не превышает 1000 символов.
Output
Нужно выдать на стандартное устройство вывода требуемую часть строки.
Sample Input
Anton and Peter both are little boys, but Anton is greater than Peter.
both
greater
Sample Output
are little boys, but Anton is

Есть решение:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <sstream>
#include <string>
 
using namespace std;
 
int main()
{
    string str1, a, b, d;
    int p, r;
    getline(cin, str1); str1 = ' ' + str1 + ' ';
    cin >> a;
    cin >> b;
    p = str1.find(a, 0);
    str1.erase(str1.begin(), str1.begin() + (p + a.size()));
    r = str1.rfind(b);
    d = str1.substr(0, r);
 
    cout << d;
    return 0;
}


Но, суть в том, что задание проверяет сайт автоматически и прогоняет данное решение через 20 тестов, итог таков что решение проходит только 14 тестов из 20, какие именно тесты проходят - не известно. В чем может быть проблема? Может есть другой вариант решения этого задания?

Скрин тестов
Кликните здесь для просмотра всего текста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.01.2020, 21:43
Ответы с готовыми решениями:

Вывести подстроку, расположенную между первым и последним пробелом исходной строки
Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом исходной...

Вывести строку, расположенную между первым и последним пробелом исходной строки
Дана строка, содержащая по крайней мере один символ пробела. Вывести строку, расположенную между первым и последним пробелом исходной...

Вывести подстроку, расположенную между первым и последним пробелом исходной строки
Дана строка, содержащая, по крайней мере, один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом...

31
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
05.01.2020, 00:34
Студворк — интернет-сервис помощи студентам
То есть убираем из фразы все разделители, кроме пробелов, токенизируем строку и тогда начинаем поиск в массиве слов
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.01.2020, 00:47
zayats80888, различие подстроки и слова ? согласен, нужно учитывать. напишите код ?
0
05.01.2020, 00:57

Не по теме:

Цитата Сообщение от Yetty Посмотреть сообщение
напишите код ?
Лень

0
1 / 1 / 0
Регистрация: 11.02.2019
Сообщений: 23
05.01.2020, 11:35  [ТС]
Yetty, этот вариант проходит так же как и мой, 14 тестов из 20. По условию задачи нужно вывести подстроку находящуюся после первого вхождения "а" и последнего вхождения "b", если строка выглядит "aaa a bbb c ccc", то выведется "aa a bb" и это правильно, но только по логике и условию задачи. А программа, которая проходит 20 тестов из 20, и за нее дают максимальные 100 баллов что странно, не выводит результат вообще, если строка выглядит "aaa a bbb c ccc" и как условие идут буквы "а" и "b".
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.01.2020, 16:20
iProton, не совсем так, слово это частный случай подстроки
Цитата Сообщение от iProton Посмотреть сообщение
"aaa a bbb c ccc" и как условие идут буквы "а" и "b".
в задаче не буквы, а слова (слово 'a' есть, слова 'b' нет)

проверьте такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
int main()
{    
    std::string src, sub1, sub2;
    std::getline(std::cin, src);
    std::cin >> sub1 >> sub2;
    size_t f1, f2;
    
    src=" " + src + " ";
    sub1=" " + sub1 + " ";
    sub2=" " + sub2 + " ";
    
    f1 = src.find(sub1) + sub1.size() - 1;    
    f2 = src.rfind(sub2) + 1;
 
    std::cout << src.substr(f1, f2 - f1);
    return 0;
}
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
05.01.2020, 16:33
Yetty, boys but - не проходит
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.01.2020, 16:50
fao,
Цитата Сообщение от iProton Посмотреть сообщение
соседние слова ... разделены одним пробелом
т.е. слова boys в строке нет
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
05.01.2020, 16:59
В начале темы дан пример фразы, которая может тестироваться. Согласно примеру в предложении возможны разделители: точки, запятые и т.д.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.01.2020, 17:16
fao, Вы наверное не разобрались что такое слово. В этой задаче слово – это последовательность непробельных символов, ограниченная пробелами или концами строки. ещё раз:
Цитата Сообщение от Yetty Посмотреть сообщение
слова boys в строке нет
есть слово boys, (из 5 символов)
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
05.01.2020, 17:35
Yetty, Вот-Вот. Хорошее определение. Только где оно в условии. Люди, привыкшие в математическим формулировкам и определениям могут неверно истолковать то упоминание о пробелах
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.01.2020, 18:21
iProton, перевод строки ещё нужно учесть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
 
int main()
{      
    std::string src, sub1, sub2;
    std::getline(std::cin, src);
    std::cin >> sub1 >> sub2;
    size_t f1, f2;
    
    src[src.size()-1]=' ';
    src=" " + src;    
    sub1=" " + sub1 + " ";
    sub2=" " + sub2 + " ";
    
    f1 = src.find(sub1) + sub1.size() - 1;    
    f2 = src.rfind(sub2) + 1;
 
    std::cout << src.substr(f1, f2 - f1);
    return 0;
}
Цитата Сообщение от fao Посмотреть сообщение
Только где оно в условии
из условия (уже цитировал, повторить не сложно)
Цитата Сообщение от iProton Посмотреть сообщение
соседние слова ... разделены одним пробелом
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
05.01.2020, 18:33
Yetty, если в задаче используется понятие, которое имеет неоднозначное толкование, то всегда необходимо предварительно (явно) давать этому понятию строгое определение. У понятия "слово" есть ряд толкований и если не указать какое из них актуально в данном контексте, то у людей, решающих эту задачу, может быть головняк.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2020, 18:33

Необходимо получить подстроку, расположенную между первым и последним пробелом исходной строки
помогите пожалуйста!!! Дана строка S. Необходимо получить подстроку, расположенную между первым и последним пробелом исходной строки....

Найти сумму положительных элементов, расположенных между первым и последним отрицательными элементами строки
Помогите найти сумму положительных элементов, расположенных между первым и последним отрицательными элементами этой же строки. #include...

Дана строка S. Необходимо получить подстроку, расположенную между первым и последним пробелом исходной строки
Пожалуйста, помогите разобраться! Дана строка S. Необходимо получить подстроку, расположенную между первым и последним пробелом исходной...

Удалить из строки все символы, расположенные между первым и последним вхождением заданного символа
используя стандартные процедуры и функции для работы со строками. Дана строка S и символ C. удалить из нее все символы, расположенные...

В списке переставить в обратном порядке элементы между первым и последним вхождением элемента
Пусть L обозначает кольцевой двунаправленный список с заглавным звеном. Описать функцию или процедуру, которая в списке L переставляет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Опции темы

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru