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

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

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

 
 Ответить  Открыть новую тему 
> Строки, подстроки.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский
Реальное имя: Анжелика

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


Ребят, у меня есть еще одно задание. Помогите мне понять его: все слова, которые не содержат заданной подстроки, заменить на «[censored]». Это обозначает, что я должна найти слова, потом помотреть есть ли в нем подстрока, причем слово должно быть больше подстроки, а потом если такая подстрока не нашлась в слове, то его надо заменить на «[censored]»? Я правильно поняла. Если нет, то укажите на ошибки.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


1) Разбиваешь строку на слова : Разбиение строки на слова

2) После этого идешь по массиву и проверяешь входит ли в слово заданная подстрока с помощью ф-и pos, как ей пользоваться найдешь тут : FAQ : Строки

будут вопросы, задавай


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский
Реальное имя: Анжелика

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


Цитата(klem4 @ 18.12.2005 20:59) *

После этого идешь по массиву и проверяешь

Все бы хорошо, но мне нельзя трогать знаки препинания в строке. Как с этим быть?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Ну тогда не надо заносить слова в массив !;) Доходишь до того момента как выделила слово и заботаешь с ним, все просто ;)


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Все бы хорошо, но мне нельзя трогать знаки препинания в строке. Как с этим быть?

А там, извини, есть алгоритм разбиения (конкретно - вот этот), который вернет тебе только начало/длинну каждого слова, а строка останется неизменной, и никуда твои знаки препинания не денутся...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский
Реальное имя: Анжелика

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


Ребят, скажите, что у меня не так. результат не такой какой нужен. как избавиться от смещения индексов. Вот программа:
Код

uses crt;
const delimiter = [#32, ',', '.', '!', ':'];
type wrd_info = record start, len: byte; end;
function get_words(s: string; var words: array of wrd_info): integer;
var
   count: integer;
   i, curr_len: byte;
begin
     count := -1; i := 1;
     while i <= length(s) do
     begin
           while (s[i] in delimiter) and (i <= length(s)) do inc(i);
           curr_len := 0;
           while not (s[i] in delimiter) and (i <= length(s)) do begin
           inc(i);
           inc(curr_len);
    end;
    if curr_len > 0 then
    begin
         inc(count);
         with words[count] do
         begin
              start := i - curr_len;
              len := curr_len
         end;
    end;
end;
    get_words := count + 1;
end;

const max_word = 255;

var words: array[1 .. max_word] of wrd_info;
    i, n: integer;
    s,p,h:string;
begin
     clrscr;
     Write('Vvedite glavnuu stroku');
     readln(s);
     Write('Vvedite podstroku');
     readln(h);
     n := get_words(s, words);
     for i := 1 to n do
     if pos(h, copy(s, words[i].start, words[i].len)) = 0 then
     begin
          delete(s,words[i].start, words[i].len);
          insert('[consored]', s,words[i].start);
     end;
     writeln(s);

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
как избавиться от смещения индексов
yes2.gif Стандартная ошибка... Нужно проходить по словам в обратном порядке (от конца предложения к началу), тогда индексы будут меняться, но все последующие слова уже заменены, и ты просто на это не обращаешь внимания...

Попробуй:
     n := get_words(s, words);
for i := n downto 1 do
if pos(h, copy(s, words[i].start, words[i].len)) = 0 then
begin
delete(s,words[i].start, words[i].len);
insert('[consored]', s,words[i].start);
end;
 К началу страницы 
+ Ответить 

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

 





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