经典的题目,在字符串str中找子串sub的起始位置:
int string_sub(const char* str, const char* sub)
{
int i = 0, j = 0;
while(str[i] != 0 && sub[j] != 0)
{
if (str[i] != sub[j])
{
if(j == 0)
++i;
else
j = 0;
}
else
{
++i;
++j;
}
}
int len = strlen(sub);
printf("i=%d, j=%d\n", i, j);
if (j == strlen(sub))
return i - j;
else
return -1;
}
当然这样的代码,还有几个小问题,比如判断空指针,比如使用了strlen()这个函数。
改进一下如下:
int string_sub(const char* str, const char* sub)
{
int i = 0, j = 0;
if(str == NULL || sub == NULL)
return -1;
while(str[i] != 0 && sub[j] != 0)
{
if (str[i] != sub[j])
{
if(j == 0)
++i;
else
j = 0;
}
else
{
++i;
++j;
}
}
if(j == 0)
return -1;
else if (sub[j] == 0)
return i - j;
else
return -1;
}
还能改进吗,大家有更简洁,高效的吗