информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медГде водятся OGRыСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
угу 18.08.05 10:40  Число просмотров: 1901
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
<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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach