编写字符串处理函数_strstr(str1, str2),返回str1串中与str2相同的子串和其后续字符.
下面的是执行结果正确的程序:
字符串匹配函数char* _strstr(char* a,char* b)
#include "stdio.h"
//#include <string.h>
int _strlen(char* a)
{int i;
for(i=0;a[i];i++);
return i;
}
int _strncmp(char* a,char* b,int n)
{
int i=0,s;
while(a[i]==b[i] && a[i])
i++;
if(i>=n)
return 0;
else if(i<n && a[i]-b[i])
return 1;
else
return -1;
}
char* _strstr(char* a,char* b)
{
int len2;
if ( !(len2 = _strlen(b)) )
return a;
for ( ; *a; ++a )
{
if ( *a == *b && _strncmp( a, b, len2 )==0 )
return a;
}
return NULL;
}
int main(void)
{
char *str1 = "Borland International", *str2 = "nation", *ptr;
//clrscr();
ptr = _strstr(str1, str2);
printf("The substring is: %s\n", ptr);
return 0;
}
运行结果为"The substring is:national"
其中的字符串比较函数_strncmp是用本人自己的算法写的,现在有个问题,就是当用msdn中关于strcmp函数的算法写一个本程序中的_strncmp函数时,为什么执行的结果会是(null)呢?代码如下:
#include "stdio.h"
//#include <string.h>
int _strlen(char* a)
{int i;
for(i=0;a[i];i++);
return i;
}
int _strncmp(char* a,char* b,int n)
{
int i=0,s;
while(!(s=a[i]-b[i]) && a[i] && i<=n)
i++;
if(s<0)
return -1;
if(s>0)
return 1;
else
return 0;
}
char* _strstr(char* a,char* b)
{
int len2;
if ( !(len2 = _strlen(b)) )
return a;
for ( ; *a; ++a )
{
if ( *a == *b && _strncmp( a, b, len2 )==0 )
return a;
}
return NULL;
}
int main(void)
{
char *str1 = "Borland International", *str2 = "nation", *ptr;
//clrscr();
ptr = _strstr(str1, str2);
printf("The substring is: %s\n", ptr);
return 0;
}
慕斯王
富国沪深