技术笔试面试

面试编程写strstr

面试,让现场拿纸写程序,实现strstr函数。用C语言。你能5分钟内写出来么?(考虑当时压力和环境的情况下)

其中一种答案如下:(不保证效率和复杂度)

int main()
{
char str[]="rocrocket is me.";
char substr[]="t i";
int strsize;
int subsize;
subsize=strlen(substr);
strsize=strlen(str);
int i=0,j=0;
while((j!=subsize)&&(i!=strsize)){
	if(str[i]==substr[j]){
		i++;
		j++;
	}else{
		i=i-j+1;
		j=0;
	}
}
if(j==subsize){
	printf("Matched!\n");
}else{
	printf("Pity!\n");
}
return 0;
}

over~

8条评论

  1. const char * strstr(const char *s1, const char *s2)
    {
    const char *tmp, *tmp2;
    for (tmp = s1; *tmp != ”; ++tmp)
    {
    const char *tmp1 = tmp;
    tmp2 = s2;
    while (*tmp1 == *tmp2 && *tmp2 != ”)
    {
    ++tmp1;
    ++tmp2;
    }

    if (*tmp2 == ”)
    {
    return tmp;
    }
    else
    {
    tmp2 = s2;
    }
    }
    return NULL;
    }

  2. 看到后也迅速写了了一个,但是没有考虑到母串比字串短的情况。。。编程还是不够谨慎啊。。

  3. 看到你说的”我们的希望从2008年9月9日开始。”
    今天刚好是2011年9月9日呢,呵呵,我第一次来.居然这么巧.

  4. 随便写了个,让大家参考吧

    #include

    const char *StrStr(const char* str1, const char* str2)
    {
    const char *ret = str1;
    const char *p2 = str2;
    do
    {
    ret = str1;
    p2 = str2;

    while( *(str1++) == *(p2++) )
    {
    if(*p2 == ”)
    {
    return ret;
    }
    }
    }
    while( *str1 != ” );

    return NULL;
    }

    void main(void)
    {
    char* str1 = “i chinese am”;
    char* str2 = ” am “;

    printf(“%s\n”, StrStr(str1, str2));

    }

  5. 感觉你的编程功力不错,真的是五分钟写出来的么,和书上说字符串匹配的算法很像了

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *