Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
 |  |  |
угу 18.08.05 10:40 Число просмотров: 1880
Автор: 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 Статус: Незарегистрированный пользователь
|
|
|
|