您的位置:首页 > 编程语言 > C语言/C++

好久没写过博客,写一道今天的笔试题

2016-04-08 00:19 369 查看
要求从str1字符串中找出str2字符串最后一次出现的位置,最简单应该是从后往前找,当时估计有点紧张没多想,结果可想而知,回来自己写了两种实现,从后往前和从前往后,前者简单就不贴代码了,后者突发奇想用了我最不擅长的递归来实现的,略微复杂,可读性较差,不过还是给写出来了,功能还算完善,支持类似ababa,中找aba,aabc中找ab,abcde中找de,后两种其实还算简单,考虑到就行,递归就是为第一种情况服务的...

#include <stdio.h>

int mystr(char *str1, char *str2)
{
int i=0,j=0,tmp=0,ok = -1;
if(str1 == NULL || str2 == NULL)
return -1;
for(i=0,j=0; str1[i] != '\0'; i++)
{
if(str1[i] == str2[j])
{
if(j == 0)
tmp = i;
else
{
if(str2[j+1] == '\0')
ok = tmp;
if(str2[j] == str2[0])
{
tmp = mystr(&str1[i], str2);
if(tmp == -1)
break;
else
{
ok = i+tmp;
break;
}
}
}
j++;
if(str2[j] == '\0')
{
ok = tmp;
j = 0;
}
}
else
{
if(j != 0)
i = i - j;
j = 0;
}
}
return ok;
}

void main(void)
{
int i;
char *c = NULL;
char *d = NULL;
char a[20] = {"ababsababababa"};
char b[6] =   {"aba"};

i = mystr(a, b);
printf("%d\n", i);
}
欢迎交流.

本文原创,转载请注明出处,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归 c语言 笔试题