[C/OC的那点事儿]在一个字符串中查找另一个特定的字符串并确定下标

//
//  main.c
//  strstr
//
//  Created by lichan on 13-11-20.
//  Copyright (c) 2013年 com.lichan. All rights reserved.
//

#include <stdio.h>
#include <string.h>
char * mystrstr (const char * str1,const char * str2)
{
    char *cp = (char *) str1;//因为 str1 为不可变量,需要转换成可变的cp变量.
    
    int length = (int)strlen(str1);
    char *s1, *s2;
    
    if ( !*str2 )   //当str2 为空得时候, 直接 把 str1 输出.
        return((char *)str1);
    
    while (*cp)
    {
        s1 = cp;
        s2 = (char *) str2;
        
        while ( *s1 && *s2 && !(*s1-*s2) )   //判断是否有相等的字符. !(*s1 - *s2)==1 表示相等,如果==0 表示 不相等.
            s1++, s2++;
        
        if (!*s2)
        {
           int length2 = (int)strlen(cp);
        printf("%d",(length - length2));
            return(cp);
        }
        
        cp++;
    }
    return NULL;
}

int main(int argc, const char * argv[])
{
    char *str1 ="lichan";
    char *str2 = "cha";
    
    printf("%s",mystrstr(str1, str2));

    // insert code here...
    printf("Hello, World!\n");
    return 0;
}
 

不得不说,这种算法真心的很巧妙啊. 领教了


方法二: 确定位置:

int strfind(char *str1,char *str2)
{
    int acount = mystrlen(str1);
    int bcount = mystrlen(str2);
   
    
    for (int i = 0; i < acount; i ++)
    {
         int equle = 1;
        
        for (int j = 0; j < bcount; j++)
        {
            if (*(str1+i +j ) != *(str2 + j))
            {
                equle = 0;
                break;
            }
        }
        if (equle ==1)
        {
            return i+1 ;
        }
        
        
    }
    return -1;
}

虽然时间复杂度大,但是也是一种算法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值