Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1732416
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类:

2011-09-01 12:55:28

原文地址:C字符串处理strstr, strindex 作者:cnhnyu

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