/*模式匹配算法*/
#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;
}
不使用指针的一种模式匹配算法
最新推荐文章于 2022-01-29 20:19:48 发布