/** title: Processamento de Strings em C: pattern matching (aula TP1) ficheiro: ex10n.c autor: (PRH) versao de: 2001.04.17 .definicao de Tipos .uso de arrays de caracteres para implementar strings .uso de expressoes regulares para ler 1 linha com scanf() .uso da funcao strlen() **/ #include #define true 1 #define false 0 typedef int bool; typedef char str[50]; int match(str s1, str s2 ) {int i=0, j, k, fim, res=0; bool enc=false; fim = strlen(s1) ; while ((i < fim) && !enc){ k=j=0; while (((s2[j] == s1[i+k]) || (s2[j]=='?') || (s2[j] == '*')) && (s2[j] != '\0') && (s1[i+k] != '\0')) { if (s2[j] == '*') { while ((s1[i+k] != s2[j+1])&&(s1[i+k] != '\0')) {k++;} } else { k++; } j++; } if (s2[j] == '\0') { enc = true; } else { i++; } } res = (enc)? i : -1; return(res); } /*----- programa principal -----*/ int main( ) {int p; str linha, palavra; while (scanf("%[^\n]",linha) != 1) { scanf("\n"); } while (scanf("%[^\n]",palavra) != 1) { scanf("\n"); } if((p=match(linha, palavra)) != -1) printf("Ocorreu pela primeira vez na posicao %d\n", p); else printf("Nao ocorreu\n"); return(0); }