有的时候,我们为了一些特殊的需要,不能使用C语言提供的字符串处理函数,而需要我们自己动手来写,下面是两个比较常用的例子:
(1) strstr
原型声明:char *strstr (const char *s1, char *s2);
改函数从字符串s2中查找子字符串s1, 如果找到了返回子找到位置的子字符串的指针,否则返回NULL.
(2)strindex
原型声明:int strindex (const char *s1, char *s2);
返回字符串s2在字符串s1中的位置,这个位置是从0开始的,如果没有找到,则返回-1
下面是实现以及使用的例子:
/*
File Name: str.c
Function: to find a sub string in a string.
*/
#include
char *strstr (const char *s1, const char *s2);
int strindex (const char *s1, const char *s2);
int main()
{
char *s1 = "Hello, Welcome to linux world.";
char *s2 = "linux";
char *res = NULL;
printf("string: %s\n", s1);
printf("sub string: %s\n", s2);
printf("now we will find sub string \"%s\" in \"%s\"\n", s2, s1);
if ( (res = strstr(s1, s2)) == NULL )
{
printf("Can't find the string %s in %s\n", s2, s1);
}
else
{
printf("Find string: %s\n", res);
printf("The position [zero-based] is %d\n", strindex(s1, s2));
}
return 0;
}
char *strstr (const char *s1, const char *s2)
{
unsigned int i = 0;
if ( *s1 == 0 ) // 如果字符串s1为空
{
if ( *s2 ) // 如果字符串s2不为空
return (char*)NULL; // 则返回NULL
return (char*)s1; // 如果s2也为空,则返回s1
}
while ( *s1 ) // 串s1没有结束
{
i = 0;
while ( 1 )
{
if ( s2[i] == 0 )
{
return (char*)s1;
}
if ( s2[i] != s1[i] )
break;
i++;
}
s1++;
}
return (char*)NULL;
}
int strindex(const char *s1, const char *s2)
{
int nPos = -1;
char *res = strstr(s1, s2);
if ( res )
nPos = res - s1 ;
return nPos;
}
阅读(650) | 评论(0) | 转发(0) |