On Tue, May 13, 2003 at 10:23:01AM -0400, Templar Viper wrote: > A while ago, I fixed this code together. It checks the argument for > cursing (placed in curse_list), and replaces it with a harmless beep. I > had to use str_strr, as strstr isn't case sensitive. However, I want to > ignore certain characters, such as spaces, full stops and more of those. > Here is the function: [snip] Here's a possibility for some functions to handle whitespace: /* Return number characters in the string to skip starting at p[0] */ int curse_skip_chars(p) char *p; { if (p[0] == ' ' || p[0] == '\t') return 1; return 0; } /* Replace curse words */ int curse_replace( data, curses, curse_count, replace ) char *data; char **curses; int curse_count; int replace; { char *p, *q; int i, j, l, v, m; int word_start = 1; const char beep[] = { '*', 'b', 'e', 'e', 'p', '*' }; if (!data || !curses) return; /* Start searching */ for( p = data ; *p; p++) { /* Curses don't start at the end */ if (*p == ' ' || *p == '\t') word_start = 1; if (*(p+1) == '\0') continue; /* Skip characters */ if ((m = curse_skip_chars(p)) > 0) { p += (m - 1); continue; } /* Uncomment to restrict matches to start at the beginning of a word */ /* if (word_start)*/ for( i = 0, j = 0, v = 0; i < curse_count; i++) { /* See if this letter possibly begins a curse */ if (UPPER(*p) == UPPER(*curses[i])) { l = strlen(curses[i]); for(q = p; *q && j < l; q++) { /* Skip characters in the search */ if ((m = curse_skip_chars(q)) > 0) { q += (m - 1); continue; } /* It's not the curse */ if (UPPER(*q) != UPPER(curses[i][j])) break; j++; } /* j < l, not a full match */ if (j < l) continue; else if (replace) { /* If applicable replace curse */ if (*q) { memset(p, '*', v=(int)(q-p)); } else if ((int)(q - p) > 0) { memset(p, '*', v=(int)(q-p-1)); } else v = 0; /* If it will fit, write out the 'beep' */ if (v >= sizeof beep) { memcpy(p, beep, sizeof beep); } /* Return 1 to indicate curse found*/ return (1); } else return (1); } word_start = 0; } } /* No curse found */ return (0); } -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/26/03 PDT