информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetВсе любят медГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 На GitHub пугают ложными предупреждениями... 
 Атака на пользователей больших... 
 Notepad++ полгода раздавал зараженные... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
спасибо 17.08.05 21:30  Число просмотров: 2036
Автор: YoungNigga Статус: Незарегистрированный пользователь
<"чистая" ссылка>
<beginners>
вопрос по C 17.08.05 20:08  
Автор: YoungNigga Статус: Незарегистрированный пользователь
<"чистая" ссылка>
я книгу читаю по C. автор сказал, типа в качестве упражнения написать функцию, которая в данном тексте находит данную подстроку. в принципе сделал, только немного коряво получилось - подгонять пришлось по ходу. вот код:
int find_substring(char*text, char*word)
{
int count=0;
int c;
int len_w=strlen(word);
int len_t=strlen(text);
for(int i=0;i<len_t;i++)
{
if(text[i]==word[0])
{
c=0;
while(c<len_w&&text[i]==word[c])
{
i++;
c++;
}
if(c==strlen(word))
count++;
i--;
}
}
return count;
}
я просто адрес автора не нашел, потому сюда пишу. может если время и желание у кого есть свою версию написать, чтоб я посмотрел или совет дать. заранее спасибо
если уж писать это вручную... 17.08.05 20:29  
Автор: dl <Dmitry Leonov>
Отредактировано 18.08.05 10:44  Количество правок: 2
<"чистая" ссылка>
то strlen не нужен, достаточно сравнивать с нулем. И счетчики избыточные, тот же внутренний while записывается гораздо элегантнее, если работать через указатели:

char* pT = text;
char* pW = word;

.....
while(*pW && (*pT++ == *pW++));

вместо

> c=0;
> while(c<len_w&&text[i]==word[c])
> {
> i++;
> c++;
> }

(кстати, в этом цикле не хватает проверки на выход за границу текста)

Остальной код аналогично, его лучше написать самому, чтобы прочувствовать работу со строками через указатели.
В "while(" опечатка: надо "*pW" вместо просто "pW". 18.08.05 09:58  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
Отредактировано 18.08.05 10:39  Количество правок: 2
<"чистая" ссылка>
И еще. В предположении того, что обрабатывается простой текст, в котором встречаются слова с аналогичными приставками, корнями и даже суффиксами, но отличающимися окончаниями, быстрее будет сравнивать с шаблоном начиная с конца, чтоб не тратить время на проверку совпадающей части слова.
угу 18.08.05 10:40  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
спасибо 17.08.05 21:30  
Автор: YoungNigga Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach