Ricerca appunti sul web

Ricerca personalizzata

giovedì 26 febbraio 2009

Sorgenti c : Lucchetto

Scrivere una funzione che prese in input due stringhe, A e B, stampi la stringa
corrispondente al lucchetto di A e B.

#include<stdio.h>

int lucchetto(char *, char *);

int main(){
char stringa1[255];
char stringa2[255];
scanf("%s",stringa1);
scanf("%s",stringa2);
lucchetto(stringa1,stringa2);
return 0;
}

int lucchetto(char *s1, char *s2)
{
int i=0;
int j=0;
int z=0;
int k=0;
int t=0;
while(s1[i]!='')
{
i++;
}

while(s2[j]!='')
{
j++;
}

int maxlen = 0;
int x,y;
int num[i][j];
/* trovo la massima sottostringa comune */
for (x = 0; x < i; x++)
{
for (y = 0; y < j; y++)
{
if (s1[x] != s2[y])
num[x][y] = 0;
else
{
if ((x == 0) || (y == 0))
num[x][y] = 1;
else
num[x][y] = 1 + num[x-1][y-1];

if (num[x][y] > maxlen)
{
maxlen = num[x][y];
}
}
}
}
z = i-maxlen;
/* se la massima sottostringa non è la coda di a e la testa di b */
if (s2[k]!= s1[z])
{
/* attacco le stringhe */
for (j=0 ; s2[j] != '' ; j++)
{
s1[i] = s2[j];
i++;
} s1[i]= '';

for (k=0 ; s1[k]!=''; k++)
printf("%c",s1[k]);
return 0;
}

/* altrimenti attacco le stringhe*/

for(k=maxlen; s2[k]!= ''; k++)
{
s1[z]= s2[k];
z++;
}s1[z]='';

/* stampo la stringa finale contenuta in s1*/
for (k=0 ; s1[k]!=''; k++)
printf("%c",s1[k]);
}

0 commenti: