不使用指针的一种模式匹配算法

 
/*模式匹配算法*/
#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int max);
int strindex(char source[], char searchfor[]);
char pattern[] = "oucl";

int main()
{
   char line[MAXLINE];
   int found = 0;
   /*当行line存在时*/
   while(getline(line, MAXLINE) > 0)
   {
     if(strindex(line, pattern) >= 0)
      {
	    printf("The pattern existed in current line:\n%s\n",line);
		printf("The location of the pattern is %d\n",strindex(line,pattern));
		found++;
	  }
   }
   return found;
}

/*获取读取的下一行的算法*/
/*len是指定的每一行最大长度*/
int getline(char line[], int len)
{
   int i, c;
   i = 0;
   /*当c不是文件结束符,不是换行符,且i没有超过规定的行长度时*/
   while((c = getchar()) != EOF && c != '\n' && i < len - 1)
   {
      line[i] = c;
	  i++;
   }
   /*处理c为换行符时的特殊情况*/
   if(c == '\n')
   {
      line [i++] = c;
   }
   line[i] = '\0';/*将line[]转换为字符串*/
   return i;
}

/*模式匹配的算法,返回模式串在目标串中出现的起始位置*/
int strindex(char s[], char t[])
{
  int i, j, k;
  for(i = 0; s[i] != '\0'; i++)
  {
    /*j是用来回朔的变量*/
    for(j = i, k = 0; s[j] == t[k] && t[k] != '\0'; j++, k++)
	;
	if(k > 0 && t[k] == '\0')
	return i;
  }
  return -1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值