0; enquanto ( i < tam ) faça { se (cadeia[i] = procurado) { encontrados encontrados + 1; } i i + 1; } retorne encontrados; } etset t Variáveis: i = 5 encontrados = 2 Falha o teste da estrutura de repetição O teste será realizado supondo que: cadeia = teste tam = 5 procurado = t 45 inteiro conta( caracter cadeia[], inteiro tam, caracter procurado ) { inteiro encontrados, i; i 0; encontrados 0; enquanto ( i < tam ) faça { se (cadeia[i] = procurado) { encontrados encontrados + 1; } i i + 1; } retorne encontrados; } etset t Variáveis: i = 5 encontrados = 2 Retorna o número de caracteres encontrados: 2 O teste será realizado supondo que: cadeia = teste tam = 5 procurado = t 46 Exercício resolvido 2: Busca em Strings em C Criar uma função para verificar se a string s2 está contida na string s1. A função deverá retornar 1 se encontrar a string ou 0, caso contrário. Ex.: Se s1 fosse Ana Maria Silva e s2 fosse Maria , a função retornaria 1, pois s2 está contido em s1. 47 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } O teste será realizado supondo que: s1 = Este é um teste s2 = um 48 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Função é chamada passando- se s1 e s2 como parâmetro 49 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = j = aux = tam1 = 15 tam2 = 2 Variáveis são criadas e inicializadas. tam1 recebe o tamanho de s1 e tam2 recebe o tamanho de s2. 50 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 0 j = aux = tam1 = 15 tam2 = 2 A idéia central é varrer s1 comparando com s2, caracter a caracter. 51 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 0 j = 0 aux = 0 tam1 = 15 tam2 = 2 Para fazer a comparação, uma variável auxiliar (aux) será utilizada. 52 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 0 j = 0 aux = 0 tam1 = 15 tam2 = 2 Como caracteres não são iguais, executa o break! 53 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 0 j = 0 aux = 0 tam1 = 15 tam2 = 2 Falha nessa condição e continua no loop externo 54 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 1 j = 0 aux = 0 tam1 = 15 tam2 = 2 Vai para a próxima iteração do loop externo! 55 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 1 j = 0 aux = 1 tam1 = 15 tam2 = 2 Busca agora começa do segundo caracter de s1 em relação ao primeiro de s2 e falha. 56 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } Falha nessa condição e continua no loop externo Variáveis: i = 1 j = 0 aux = 1 tam1 = 15 tam2 = 2 etsetmuéetsE mu 57 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 2 j = 0 aux = 2 tam1 = 15 tam2 = 2 Testando os próximos elementos em busca de um válido 58 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 3 j = 0 aux = 3 tam1 = 15 tam2 = 2 Testando os próximos elementos em busca de um válido 59 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmué_etsE mu Variáveis: i = 4 j = 0 aux = 4 tam1 = 15 tam2 = 2 Testando os próximos elementos em busca de um válido 60 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 5 j = 0 aux = 5 tam1 = 15 tam2 = 2 Testando os próximos elementos em busca de um válido 61 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmu_éetsE mu Variáveis: i = 6 j = 0 aux = 6 tam1 = 15 tam2 = 2 Testando os próximos elementos em busca de um válido 62 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 7 j = 0 aux = 7 tam1 = 15 tam2 = 2 Testando os próximos elementos em busca de um válido 63 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 7 j = 0 aux = 8 tam1 = 15 tam2 = 2 Teste falha e incrementa variável aux. 64 int buscaString(char s1[], char s2[]) { int i,j,aux, tam1, tam2; tam1 = strlen(s1); tam2 = strlen(s2); for(i=0;i<tam1;i++) { aux=i; for(j=0;j<tam2 && aux<tam1;j++) { if (s2[j] != s1[aux]) break; aux++; } if (j == tam2) return 1; } return 0; } etsetmuéetsE mu Variáveis: i = 7 j = 1 aux = 8