#include <stdio.h>
int bf_match(const char txt[], const char pat[])
{
int pt = 0;
int pp = 0;
int count = 0;
while (txt[pt] != '\0' && pat[pp] != '\0')
{
//print
if (pp == 0)
{
printf("%d ", pt);
for (int i = 0; txt[i] != '\0'; i++)
printf("%c", txt[i]);
}
else
{
printf(" ");
for (int i = 0; txt[i] != '\0'; i++)
printf("%c", txt[i]);
}
printf("\n");
//print
if (txt[pt] == pat[pp])
{
//print
for (int i = 0; i < pt + 2; i++)
printf(" ");
printf("+");
printf("\n");
for (int i = 0; i < pt + 2; i++)
printf(" ");
printf("\n");
for (int i = 0; i < pt - pp + 2; i++)
printf(" ");
for (int i = 0; pat[i] != '\0'; i++)
printf("%c", pat[i]);
printf("\n\n");
//print
pt++;
pp++;
count++;
}
else
{
//print
for (int i = 0; i < pt + 2; i++)
printf(" ");
printf("|");
printf("\n");
for (int i = 0; i < pt + 2; i++)
printf(" ");
printf("\n");
for (int i = 0; i < pt - pp + 2; i++)
printf(" ");
for (int i = 0; pat[i] != '\0'; i++)
printf("%c", pat[i]);
printf("\n\n");
//print
pt = pt - pp + 1;
pp = 0;
count++;
}
}
printf("비교를 %d회 시도합니다.\n", count);
if (pat[pp] == '\0')
return pt - pp;
return -1;
}
int main(void)
{
int idx;
char s1[256];
char s2[256];
puts("브루트-포스법");
printf("텍스트 : ");
scanf("%s", s1);
printf("패턴 : ");
scanf("%s", s2);
idx = bf_match(s1, s2);
if (idx == -1)
puts("텍스트에 패턴이 없습니다.");
else
printf("%d번째 문자부터 match합니다.\n", idx + 1);
return 0;
}