Обработка символьной информации |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Обработка символьной информации |
NeWT |
Сообщение
#1
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Здравствуйте!!!
Вот у меня проблема: я совсем не давно начал программировать на Pascale (до этого совершенно не имел понятия об этом) и там где я сейчас учусь, необходимо в течении семестра сдать несколько лабораторных работ, несколько я уже сдал, но кое-что я не понимаю. Вот, например, задача:"Ввести строку текста. Строка может быть пустая или из одних пробелов. Разделители представляют собой множество – ‘ /?.,<;>:”!’*%’. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями" Необходимо удалить первые N слов, содержащих заданную подстроку 3 раза. Я совершенно не понимаю алгоритм решения этой задачи :p2:, очень прошу помочь!!! :molitva: Заранее благодарен. |
volvo |
Сообщение
#2
|
Гость |
NeWT
Удалить только слова или разделители тоже? Пример: строка = "stststsrtsrtsee&&!%rstrstrstrtkk%<<opopopop??" N = 2 подстрока = "st" Что будет в результате? "&&!%%<<opopopop??" или "opopopop??" Сообщение отредактировано: volvo - |
expertpro_mail.ru |
Сообщение
#3
|
Гость |
писец, условие задачи писал натурально аутипный тип
пожалста, не оскорбляем никого, ОК ?. GoodWind судя по всему, условие на русском: 1.вводится "строка" 2.вводится "подстрока" 3."подстрока"="подстрока"+"подстрока"+"подстрока" 4.берем "слово" до первого встреченного разделителя (выход из цикла поиска, если больше их нет) 5.если в "слове" есть "подстрока" и счетчик удаленных "слов" не превысил N - удаляем "слово" 6.крутим дальше на пункт 4 7.удалять с разделителями - судя по всему - "слова" - это что-то типа тегов ;) Сообщение отредактировано: GoodWind - |
expertpro_mail.ru |
Сообщение
#4
|
Гость |
здесь немного упрощенно было (подстрока идет 3 раза _подряд_). пишешь вначале каркас программы, потом наворачиваешь ее...
а так - надо будет еще внутренний цикл добавить по "слову" - подсчет - сколько раз встретится "подстрока" ;) |
expertpro_mail.ru |
Сообщение
#5
|
Гость |
а как еще назвать "горе-преподавателя", который выдает такое?!
"Ввести строку текста. Строка может быть пустая или из одних пробелов." и потом сразу "Необходимо удалить первые N слов, содержащих заданную подстроку 3 раза. " - неопытные люди от таких условий впадают в полный ступор. вот так плодится раздражение и тихая ненависть к предмету, что печально... |
GoodWind |
Сообщение
#6
|
Автооответчик Группа: Пользователи Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: 16 |
expertpro_mail.ru, может Вы лучше поможете человеку кодом (с объяснением),
Цитата я совсем не давно начал программировать на Pascale (до этого совершенно не имел понятия об этом) человек ясно сказал, что он Новичок... -------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
expertpro_mail.ru |
Сообщение
#7
|
Гость |
человек просил помочь с алгоритмом. он учится сам. это всегда радует! ;)
похоже, возникло небольшое недоразумение - "писец, аутипный тип" - это имелся в виду не NeWT, а тот кто ему такое условие выдал. |
Altair |
Сообщение
#8
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата аутипный тип Ну и тип! Инкапсулировать таких надо! expertpro_mail.ru, а в чем проблемма? Надо разбирать строку... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
expertpro_mail.ru |
Сообщение
#9
|
Гость |
пусть чел вначале внешний цикл напишет, а то в двух циклах сходу его переменными придавит... новичок лучше растет постепеееееено
|
NeWT |
Сообщение
#10
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Огромное всем спасибо за ответы!!! Но у меня всё-таки так ничего толком не получается. Как мне работать с этими словами ? как мне написать цикл поиска по этим словам? и т.д Наверно вопросы покажутся Вам очень глупые, но для меня пока это очень трудно – не понятно, я очень прошу Вас мне помочь!!!
|
volvo |
Сообщение
#11
|
Гость |
NeWT
А на вопрос ответить не надо? Я во 2-ом посте спрашивал ... |
NeWT |
Сообщение
#12
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Извини...не заметил. Разделители удалять не надо!!!
|
volvo |
Сообщение
#13
|
Гость |
NeWT
Что-то типа этого... Код Const Delimiters = ['/', '?', '.', ',', '<', ';', '>', ':', '"', '!', '''', '*', '%']; Const s: String = 'stststsrtsrtsee>>!%rstrstrstrtkk%<<opopopop??'; n = 2; substr: String = 'st'; Function GetFirstWord(s: String; Var Start, Finish: Byte): String; Begin Start := 1; While s[Start] In Delimiters Do Inc(Start); Finish := Start; While not (s[Finish] In Delimiters) Do Inc(Finish); GetFirstWord := Copy(s, Start, Finish - Start) End; Function CountSubs(s, subs: String): Byte; Var p, count: Byte; Begin Count := 0; Repeat p := Pos(subs, s); If p <> 0 Then Begin Delete(s, p, Length(subs)); Inc(count) End Until p = 0; CountSubs := count End; Var iPos, wStart, wFinish: Byte; WordsDeleted: Byte; FirstWord: String; begin iPos := 1; WordsDeleted := 0; Repeat FirstWord := GetFirstWord(Copy(s, iPos, Length(s)), wStart, wFinish); If FirstWord <> '' Then Begin If CountSubs(FirstWord, substr) = 3 Then Begin Delete(s, wStart, wFinish - wStart); Inc(WordsDeleted) End Else Inc(iPos, Pred(wFinish)); If WordsDeleted = n Then Break End Until FirstWord = ''; Writeln('Result string: ', s) End. Это выглядит непросто, я знаю. Но постарайся понять, что делает этот код... |
NeWT |
Сообщение
#14
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Большое спасибо!!! Это выглядит действительно не просто, но я обязательно постараюсь понять!!!!
|
Текстовая версия | 11.01.2025 21:59 |