// thus on Tue, 20 Jan 1998 12:07:26 -0600, Akuma/Chris virtually wrote:
> I finally got around to trying your version of the str_str() and I must
> say it worked fine, but it wasn't case insensitive :-P
> I fixed it by changing one line down there.
> the 'if (*h == *n)' should be 'if (LOWER(*h) == LOWER(*n))'
Uhm, yeah... =) Well I could always fall back on the crutch/excuse that I
was using vi instead of emacs at the time...
I did forget to check the start of the string for case-insensativity, nice
catch. If the starts don't match, it would never start the internal loop
to test the start of the substring.
> Thanks d.
Here are a couple more semi-useful utility functions, I've cut them out of
my C library. Since most of mud programming is string handling, hope
someone finds them useful.
/* derived from xstrcat from comp.sources.unix */
/* multiple argument strcat, requires NULL as last argument */
char *istrcat (char *d, const char *s, ...)
{
register char *p;
va_list va;
for (p = d; *p; p++); /* traverse dest with pointer */
va_start (va, s);
while (s != NULL) {
while (*s != '\0')
*p++ = *s++;
s = va_arg (va, const char *);
}
va_end (va);
*p = '\0'; /* make sure to null terminate */
return d;
}
/*
* strcat that returns end of concatented string, useful for
* linking several strings together, saves resources by not
* traversing the start of the string over and over
*/
char *istrlink (char *d, const char *s)
{
while (*d) /* traverse the first string */
d++;
while (*s) /* append second string */
*d++ = *s++;
*d = '\0'; /* make sure to null terminate */
return d; /* return current position */
}
/* reverse a string in place */
char *istrrev (char *s)
{
char *l, *r;
char c;
for (r = s; *r; r++); /* find the right side */
for (l = s; l < r; l++) { /* come from the left side */
c = *l; /* swap via the c variable */
*l = *--r;
*r = c;
}
return s;
}
/* function will center a string within a specified width */
char *istrcen (char *s, size_t w)
{
char *l, *r, *p;
size_t len;
for (l = s; isspace (*l); l++); /* delete preceding whitespace */
for (p = l; *p; p++); /* goto end of string */
for (r = (p - 1); isspace (*r); r--) /* delete trailing whitespace */
*r = '\0';
len = r - l;
if (len >= w)
memmove (s, l, len + 1);
else {
memmove (s + (w - len) / 2, l, len + 1);
memset (s, ' ', (w - len) / 2);
}
return s;
}
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST