Xenia 45 23 июля, 2010 Опубликовано 23 июля, 2010 · Жалоба _Bill, похоже на то, что ваш алгоритм даст неправильный ответ, если обе строки изначально тождественны. При этом, когда flash-строка дойдет до своего нуля, rеsult обнулится (сработает условие !*pp), отбросив этот вариант, как не являющийся совпадением - а это неправильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 24 июля, 2010 Опубликовано 24 июля, 2010 (изменено) · Жалоба _Bill, похоже на то, что ваш алгоритм даст неправильный ответ, если обе строки изначально тождественны. При этом, когда flash-строка дойдет до своего нуля, rеsult обнулится (сработает условие !*pp), отбросив этот вариант, как не являющийся совпадением - а это неправильно. Хм... За правильность алгоритма не ручаюсь. Я только формально скорректировал существующий - заменил индексы на указатели, тип и значения вспомогательной переменной. Не более того. Возможно единственно, что может повлиять на правильность работы, так это изменение порядка проверки условия совпадения символов в строках. Тогда я неправ. PS: Да, тут я действительно неправ. Посчитал не существенным порядок проверки. Изменено 24 июля, 2010 пользователем _Bill Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 24 июля, 2010 Опубликовано 24 июля, 2010 · Жалоба Классический, писанный на 'C', strstr() /* - STRSTR.C - The ANSI "strstr" function. $Revision: 38615 $ Copyright 1986 - 1999 IAR Systems. All rights reserved. */ #include "string.h" char *strstr(const char *s1, const char *s2) { int n; if (*s2) { while (*s1) { for (n=0; *(s1 + n) == *(s2 + n); n++) { if (!*(s2 + n + 1)) return (char *)s1; } s1++; } return NULL; } else return (char *)s1; } от него и плясать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
desh 0 3 августа, 2010 Опубликовано 3 августа, 2010 · Жалоба Я использую функцию которая работает одновременно со строками расположенными как в памяти программ так и в памяти данных. А для того что строки автоматически помещались во flash использую опцию компилятора --string_literals_in_flash. Из недостатков этого метода обнаружил что сама функция требует не мало памяти программ. //****************************************************************************** // Функция сравнения строк //****************************************************************************** char __generic* strstr_G(char __generic* buf, char __generic* sub) { if (*sub) { while (*buf) { char __generic* bp = buf; do { if (!*sub) return buf; } while (*bp++ == *sub++); sub -= (unsigned long) bp; sub += (unsigned long) buf; buf += 1; } return NULL; } return buf; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться