IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Обработка символьной информации
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Здравствуйте!!!
Вот у меня проблема: я совсем не давно начал программировать на Pascale (до этого совершенно не имел понятия об этом) и там где я сейчас учусь, необходимо в течении семестра сдать несколько лабораторных работ, несколько я уже сдал, но кое-что я не понимаю. Вот, например, задача:"Ввести строку текста. Строка может быть пустая или из одних пробелов.
Разделители представляют собой множество – ‘ /?.,<;>:”!’*%’. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями" Необходимо удалить первые N слов, содержащих заданную подстроку 3 раза. blink.gif
Я совершенно не понимаю алгоритм решения этой задачи :p2:, очень прошу помочь!!! :molitva:
Заранее благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






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   Обработка символьной информации   2.12.2004 23:17
volvo   NeWT Удалить только слова или разделители тоже? П…   2.12.2004 23:23
expertpro_mail.ru   писец, условие задачи писал натурально аутипный ти…   3.12.2004 0:56
expertpro_mail.ru   здесь немного упрощенно было (подстрока идет 3 раз…   3.12.2004 1:03
expertpro_mail.ru   а как еще назвать "горе-преподавателя", …   3.12.2004 1:08
GoodWind   expertpro_mail.ru, может Вы лучше поможете человек…   3.12.2004 1:09
expertpro_mail.ru   человек просил помочь с алгоритмом. он учится сам.…   3.12.2004 1:17
Altair   Ну и тип! Инкапсулировать таких надо! exp…   3.12.2004 1:40
expertpro_mail.ru   пусть чел вначале внешний цикл напишет, а то в дву…   3.12.2004 2:00
NeWT   Огромное всем спасибо за ответы!!! Но …   3.12.2004 2:59
volvo   NeWT А на вопрос ответить не надо? Я во 2-ом пост…   3.12.2004 3:03
NeWT   Извини...не заметил. Разделители удалять не надо…   3.12.2004 3:19
volvo   NeWT Что-то типа этого... Const  Delimiter…   3.12.2004 4:07
NeWT   Большое спасибо!!! Это выглядит действ…   3.12.2004 4:50


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 7.09.2025 22:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name