Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
1 / 1 / 0
Регистрация: 11.02.2019
Сообщений: 23

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

03.01.2020, 21:43. Показов 9625. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru