Подстроки в строке

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Подстроки в строке

What hosting to choose?

GeorgeSoca » 13 окт 2015, 08:51

On our web, you can feel safe! Besides we use mirrored hard drives on all of our servers so we also take backup twice a day on separate servers. We use ISPmanager as the control panel. ISPmanager is a control panel that makes it easy to administer its Web site. With us you can place as many websites and domains you wish for a hosting account.
virtual hosting

Re: Подстроки в строке

Vasilisk » 19 июл 2008, 16:46

Неа, ничего бы не было. Это был квалифицированно исполненный барышней "развод на понт", с целью выяснить, умеет ли парниша "программировать вааще" :) :) :) Снимаю шляпу - я вполне доволен состоявшей "серией транзакций".

Re: Подстроки в строке

Romeo » 18 июл 2008, 11:36

&quot писал(а):Спасибо! Чмок-чмок!
Жуть. Боюсь предположить что было бы, если бы Vasilisk написал тебе программу целиком :)

Re: Подстроки в строке

Лена89 » 18 июл 2008, 11:06

Спасибо! Чмок-чмок!

Re: Подстроки в строке

Vasilisk » 18 июл 2008, 04:24

Лена89 писал(а):Спасибо Vasilisk, что возишься со мной, не смотря на мои системообразующие недостатки! :) Понимаю...несколько нагловато с моей стороны просить исходничек, но может сбросищь какой-нибудь на "скорую руку". Я бы доработала.

Код: Выделить всё


char * stroka; //предполагаем, что это то, что разбираем, она где-то вводится

struct substroka{
  int       n_cnt;    //счётчик вхождений подстрок (при вооде подстроки - обнуляется)
  char * p_ss;      //сама подстрока, она где-то вводится
};

substroka ss[<сколько-то там подстрок>];


//бо-о-ольшой :) главный цикл, в котором мы едем по одному символу вправо и гоним 
//сравнение со всем массивом подстрок, что у нас есть
for(int i=0; i<::strlen(stroka); i++){
  
  for(j=0; j<сколько-то там подстрок; j++){

    if(::strcmp(stroka+1,ss[j].p_ss) == 0) ss[j].n_cnt++;

                                                               }  
}

//здесь надо проанализировать содержимое всех ss[...].n_cnt и принять решение, которая подстрока оказалась the closest к исходной строке...

Re: Подстроки в строке

Лена89 » 17 июл 2008, 14:29

Спасибо Vasilisk, что возишься со мной, не смотря на мои системообразующие недостатки! :) Понимаю...несколько нагловато с моей стороны просить исходничек, но может сбросищь какой-нибудь на "скорую руку". Я бы доработала.

Re: Подстроки в строке

Vasilisk » 17 июл 2008, 02:43

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

Насколько я могу понять, в твоих речениях говорится о "жадности" алгоритма - о нахождении вхождения подстроки максимальной длины. В теме "регулярные выражения" этот вопрос всесторонне обсасывается, но у нас C и нет RegEx'a

В таком случае я рекомендую следующий алгоритм. Берётся массив подстрок и упорядочивается так, чтобы самая длинная была первой. Заводится массив счётчиков - той же длины, что число подстрок. Далее организуется цикл, начиная с первого байта строки - перебираются подстроки, начиная сверху и в случае совпадения - приписывается единица в счётчик. Указатель строки сдвигается на один символ и цикл перебора подстрок повторяется...

По окончании алгоритма нужно только проанализировтаь счётчики.

Re: Подстроки в строке

Лена89 » 16 июл 2008, 20:03

Т.е. №1 совпадет 2 раза, т.к. они "правильные" (из тех же символов, тоже кол-во символов в слове ...), но их всего 2 (подстроки). №2 совпадет 3 раза, т.к. они "правильные" и их 3, т.е. больше чем 2 в №1. №3 совпадет 1 раз, т.к. одна подстрока "неправильная". Вот и выходит, что №2.
В примере я указала три набора подстрок, но может быть больше. Вопрос как наиболее "по уму", программным путем выявить (исходя из этого примера) подстроки №2.

Возможно опять кривовато написала...извини.

Re: Подстроки в строке

Vasilisk » 15 июл 2008, 23:10

А что означает фраза "наиболее часто и правильно совпадают"?

Re: Подстроки в строке

Romeo » 15 июл 2008, 20:56

Всё верно пыталась, именно эту функцию и следует использовать. Если функция возвращает не NULL, значит подстрока содержится в строке.

Вернуться к началу