实现c语言strstr函数功能

最近在重温c语言与数据结构,敲了一边c代码,实现c语言库函数strstr功能,strstr库函数返回指针,编写的strindex(s,t)返回位置是字符串t在s中的最左位置,代码如下

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[],int max);
int strindex(char source[],char searchfor[]);

char pattern[]="hello";

main()
 {
    char line[MAXLINE];
    int found=0;
    while (getline(line,MAXLINE)>0)
                if (strindex(line,pattern)>=0){
                     printf("%s",line);
                           found++;
                }
                return found;
 }

int getline(char s[], int lim)
{
        int c,i;
        i=0;
        while (--lim>0 && (c=getchar()) != EOF && c!='\n') 
                s[i++]=c;
        if (c=='\n')
                s[i++]=c;
        s[i] = '\0';
        return i;
}

int strindex(char s[], char t[])
{
        int i,j,k;

        for(i=0;s[i] !='\n';i++){
          for (j=i,k=0;t[k]!='\0' && s[j]==t[k];j++,k++)
                  ;
          if (k>0 && t[k] =='\n')
                  return i;
        }
     return -1;
}

那么我们还可以试试写出下面的这种函数来:编写函数strindex(s,t),它返回字符串t在s中最右边出现位置。如果s中不包含t,则返回-1.

可以这么理解,如果遍历成功找到了字符串t,返回最右边的位置其实就是最左边的位置+字符串t的长度,这样根据上面的算法就很容易编写新算法如下:

int strindex(char s[], char t[])
{
        int i,j,k;

        for(i=0;s[i] !='\n';i++){
          for (j=i,k=0;t[k]!='\0' && s[j]==t[k];j++,k++)
                  ;
          if (k>0 && t[k] =='\n')
                  return i+k-1;
        }
     return -1;
}

《参考c语言程序设计第二版》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值