On 6/21/13 4:02 PM, Walter Bright wrote:
On 6/21/2013 3:35 PM, Andrei Alexandrescu wrote:
On 6/21/13 3:22 PM, Adam D. Ruppe wrote:
Just for laughs I just slapped together a strstr

Post it and I'll destroy it.

Can I play, too? Mine from the Digital Mars C library. Haven't looked at
it since 2001.
==================================================

/*_ strstr.c */
/* Copyright (C) 1985-2001 by Digital Mars */
/* All Rights Reserved */
/* www.digitalmars.com */
/* Written by Walter Bright */

#include <stdio.h>
#include <ctype.h>
#include <stddef.h>
#include <string.h>
#include <stdlib.h>

#if 0 /* Smaller but slower under many circumstances. */
char *strstr(const char *s1,const char *s2)
{ size_t len2;
size_t len1;
char c2 = *s2;

len1 = strlen(s1);
len2 = strlen(s2);
if (!len2)
return (char *) s1;
while (len2 <= len1)
{
if (c2 == *s1)
if (memcmp(s2,s1,len2) == 0)
return (char *) s1;
s1++;
len1--;
}
return NULL;
}
#else

I won't comment on the B-M implementation. This brute force implementation has the problem of calling strlen on both strings upfront, which is arguably unnecessary. Although it doesn't affect complexity, it is an inefficiency hard to recover from. (The tradeoff is that memcmp will help with that.)

Andrei

Reply via email to