История изменений
Исправление
wota,
(текущая версия)
:
о котором из своих ты говориш
оба, первый:
int l = strlen(w);
char *p = s;
// Ищем слово в строке
while ((p = strstr(p, w))) {
// Если слово слева и справа закончено
if ((p == s || isspace(p[-1])) && (!p[l] || isspace(p[l])))
// Затираем его
memset(p, ' ', l);
// Пропускаем слово, чтоб искать сразу после него
p += l;
}
второй (чуть отформатил для комментариев)
char *p = s;
// Пока не дошли до конца строки
while( *p ) {
// Ищем разделитель после текущей позиции
p = strchrnul(s, ' ');
// Между текущей позицией и разделителем слово debug
if (p - s == 5 && *((int*)s) == 0x75626564 && s[4]=='g')
// Затираем его
memset(s, ' ', 5);
// Переносим текущую позицию сразу за разделитель
s = p + 1
}
а теперь опиши свой код построчно
Исправление
wota,
:
о котором из своих ты говориш
оба, первый:
int l = strlen(w);
char *p = s;
// Ищем слово в строке
while ((p = strstr(p, w))) {
// Если слово слева и справа закончено
if ((p == s || isspace(p[-1])) && (!p[l] || isspace(p[l])))
// Затираем его
memset(p, ' ', l);
// Пропускаем слово, чтоб искать сразу после него
p += l;
}
второй (чуть отформатил для комментариев)
char *p = s;
// Пока не дошли до конца строки
while( *p ) {
// Ищем разделитель после текущей позиции
p = strchrnul(s, ' ');
// Между текущей позицией и разделителем слово debug
if (p - s == 5 && *((int*)s) == 0x75626564 && s[4]=='g')
// Затираем его
memset(s, ' ', 5);
// Переносим текущую позицию сразу за разделитель
s = p + 1
}
а теперь опиши свой код построчно
Исправление
wota,
:
о котором из своих ты говориш
оба, первый:
int l = strlen(w);
char *p = s;
// Ищем слово в строке
while ((p = strstr(p, w))) {
// Если слово слева и справа закончено
if ((p == s || isspace(p[-1])) && (!p[l] || isspace(p[l])))
// Затираем его
memset(p, ' ', l);
// Пропускаем слово, чтоб искать сразу после него
p += l;
}
второй (чуть отформатил для комментариев)
void undebug_wota(char *s) {
char *p = s;
// Пока не дошли до конца строки
while( *p ) {
// Ищем разделитель после текущей позиции
p = strchrnul(s, ' ');
// Между текущей позицией и разделителем слово debug
if (p - s == 5 && *((int*)s) == 0x75626564 && s[4]=='g')
// Затираем его
memset(s, ' ', 5);
// Переносим текущую позицию сразу за разделитель
s = p + 1
}
}
а теперь опиши свой код построчно
Исправление
wota,
:
о котором из своих ты говориш
оба, первый:
int l = strlen(w);
char *p = s;
// Ищем слово в строке
while ((p = strstr(p, w))) {
// Если слово слева и справа закончено
if ((p == s || isspace(p[-1])) && (!p[l] || isspace(p[l])))
// Затираем его
memset(p, ' ', l);
// Пропускаем слово, чтоб искать сразу после него
p += l;
}
второй (чуть отформатил для комментариев)
void undebug_wota(char *s) {
char *p = s;
// Пока не дошли до конца строки
while( *p ) {
// Ищем разделитель после текущей позиции
p = strchrnul(s, ' ');
// Между текущей позицией и разделителем слово debug
if (p - s == 5 && *((int*)s) == 0x75626564 && s[4]=='g')
// Затираем его
memset(s, ' ', 5);
// Переносим текущую позицию сразу за разделитель
s = p + 1
}
}
а теперь опиши свой код
Исходная версия
wota,
:
о котором из своих ты говориш
оба, первый:
int l = strlen(w);
char *p = s;
// Ищем слово в строке
while ((p = strstr(p, w))) {
// Если слово слева и справа закончено
if ((p == s || isspace(p[-1])) && (!p[l] || isspace(p[l])))
// Затираем его
memset(p, ' ', l);
// Пропускаем слово, чтоб искать сразу после него
p += l;
}
второй (чуть отформатил для комментариев)
void undebug_wota(char *s) {
char *p = s;
while( *p ) {
// Ищем разделитель после текущей позиции
p = strchrnul(s, ' ');
// Между текущей позицией и разделителем слово debug
if (p - s == 5 && *((int*)s) == 0x75626564 && s[4]=='g')
// Затираем его
memset(s, ' ', 5);
// Переносим текущую позицию сразу за разделитель
s = p + 1
}
}
а теперь опиши свой код