Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1615148
  • 博文数量: 441
  • 博客积分: 20087
  • 博客等级: 上将
  • 技术积分: 3562
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-19 15:35
文章分类

全部博文(441)

文章存档

2014年(1)

2012年(1)

2011年(8)

2010年(16)

2009年(15)

2008年(152)

2007年(178)

2006年(70)

分类: C/C++

2007-08-22 15:36:45

有的时候,我们为了一些特殊的需要,不能使用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;
}
阅读(4881) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~