LINUX.ORG.RU

История изменений

Исправление 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
    }
}

а теперь опиши свой код