darkmax
31-05-2005, 18:07
Ho fatto un programma in c che chiede una stringa, poi la sottostringa da cercare in esso e poi un'altra sottostringa che sostituisce quella di prima..
Ora però devo fare un programma che.. presa una stringa ad esempio "camino" e poi una sottostringa, ad esempio "ami", me la cancelli.. dando come risultato "cno".. come si modifica il codice?
#include <stdio.h>
#define L1 10
#define L2 10
#define SORG 30
#define VECCHIA 10
#define NUOVA 10
#define DEST 30
typedef enum{FALSO,VERO} bool;
char* sottostringa(char* p, char* s);
bool SostPrimaOcc(char* vecchia, char* nuova, char* sorg, char* dest);
int main()
{
char* ris;
char vecchia[VECCHIA], nuova[NUOVA], sorg[SORG], dest[DEST];
char stringa[L1], pattern[L2];
bool ris1;
int scelta = -1;
while (scelta != 0)
{
printf("1) sottostringa\n2) SostPrimaOcc\n0) Esci\n\nScelta: ");
scanf("%d",&scelta);
switch(scelta)
{
case 1: printf("Inserisci la stringa in cui cercare (max 10 caratteri): ");
scanf("%s",stringa);
printf("Inserisci la sottostringa da cercare (max 10 caratteri): ");
scanf("%s",pattern);
ris = sottostringa(pattern, stringa);
if (ris == NULL)
{
printf("Non ho trovato %s in %s\n\n", pattern, stringa);
}
else
{
printf("Ho trovato %s in %s\n\n", pattern, stringa);
}
break;
case 2: printf("Inserisci la stringa in cui cercare (max 30 caratteri): ");
scanf("%s",sorg);
printf("Inserisci la sottostringa da cercare (max 10 caratteri): ");
scanf("%s",vecchia);
printf("Inserisci la sottostringa da sostituire (max 10 caratteri): ");
scanf("%s",nuova);
ris1 = SostPrimaOcc (vecchia, nuova, sorg, dest);
if (ris1 == FALSO)
{
printf("Non ho trovato %s in %s. La stringa e' rimasta: %s\n\n", vecchia, sorg, dest);
}
else
{
printf("Ho trovato %s in %s. La nuova stringa e': %s\n\n", vecchia, sorg, dest);
}
break;
case 0: break;
default : printf("Scelta non valida!\n\n");
break;
}
}
getch();
}
char* sottostringa (char* p, char* s)
{
char* i = p;
char* j = s;
int ris=0;
int cont=0;
char* found=NULL;
char* k = p;
while (*k != '\0')
{
cont++;
k++;
}
while (*j != '\0')
{
while (*i != '\0')
{
if (*i == *(j+ris))
{
ris++;
if (found == NULL)
found = j;
}
else
break;
i++;
}
if (ris == cont)
{
return found;
}
else
{
ris = 0;
found = NULL;
i = p;
}
j++;
}
return NULL;
}
bool SostPrimaOcc (char* vecchia, char* nuova, char* sorg, char* dest)
{
char* ris=sottostringa(vecchia,sorg);
int j;
char* i = sorg;
if (ris != NULL)
{
int cont=0;
char* k = vecchia;
while (*k != '\0')
{
cont++;
k++;
}
k = nuova;
int cont1=0;
while (*k != '\0')
{
cont1++;
k++;
}
k = dest;
while (i != ris)
{
*k = *i;
k++;
i++;
}
for (j = 0; j < cont1; j++)
{
*k = *nuova;
k++;
nuova++;
}
i += cont;
while (*i != '\0')
{
*k = *i;
k++;
i++;
}
*k='\0';
return VERO;
}
else
{
char* dest1 = dest;
while (*i != '\0')
{
*dest1 = *i;
i++;
dest1++;
}
*dest1='\0';
}
return FALSO;
}
Help vi prego.. :cry: :cry:
Ora però devo fare un programma che.. presa una stringa ad esempio "camino" e poi una sottostringa, ad esempio "ami", me la cancelli.. dando come risultato "cno".. come si modifica il codice?
#include <stdio.h>
#define L1 10
#define L2 10
#define SORG 30
#define VECCHIA 10
#define NUOVA 10
#define DEST 30
typedef enum{FALSO,VERO} bool;
char* sottostringa(char* p, char* s);
bool SostPrimaOcc(char* vecchia, char* nuova, char* sorg, char* dest);
int main()
{
char* ris;
char vecchia[VECCHIA], nuova[NUOVA], sorg[SORG], dest[DEST];
char stringa[L1], pattern[L2];
bool ris1;
int scelta = -1;
while (scelta != 0)
{
printf("1) sottostringa\n2) SostPrimaOcc\n0) Esci\n\nScelta: ");
scanf("%d",&scelta);
switch(scelta)
{
case 1: printf("Inserisci la stringa in cui cercare (max 10 caratteri): ");
scanf("%s",stringa);
printf("Inserisci la sottostringa da cercare (max 10 caratteri): ");
scanf("%s",pattern);
ris = sottostringa(pattern, stringa);
if (ris == NULL)
{
printf("Non ho trovato %s in %s\n\n", pattern, stringa);
}
else
{
printf("Ho trovato %s in %s\n\n", pattern, stringa);
}
break;
case 2: printf("Inserisci la stringa in cui cercare (max 30 caratteri): ");
scanf("%s",sorg);
printf("Inserisci la sottostringa da cercare (max 10 caratteri): ");
scanf("%s",vecchia);
printf("Inserisci la sottostringa da sostituire (max 10 caratteri): ");
scanf("%s",nuova);
ris1 = SostPrimaOcc (vecchia, nuova, sorg, dest);
if (ris1 == FALSO)
{
printf("Non ho trovato %s in %s. La stringa e' rimasta: %s\n\n", vecchia, sorg, dest);
}
else
{
printf("Ho trovato %s in %s. La nuova stringa e': %s\n\n", vecchia, sorg, dest);
}
break;
case 0: break;
default : printf("Scelta non valida!\n\n");
break;
}
}
getch();
}
char* sottostringa (char* p, char* s)
{
char* i = p;
char* j = s;
int ris=0;
int cont=0;
char* found=NULL;
char* k = p;
while (*k != '\0')
{
cont++;
k++;
}
while (*j != '\0')
{
while (*i != '\0')
{
if (*i == *(j+ris))
{
ris++;
if (found == NULL)
found = j;
}
else
break;
i++;
}
if (ris == cont)
{
return found;
}
else
{
ris = 0;
found = NULL;
i = p;
}
j++;
}
return NULL;
}
bool SostPrimaOcc (char* vecchia, char* nuova, char* sorg, char* dest)
{
char* ris=sottostringa(vecchia,sorg);
int j;
char* i = sorg;
if (ris != NULL)
{
int cont=0;
char* k = vecchia;
while (*k != '\0')
{
cont++;
k++;
}
k = nuova;
int cont1=0;
while (*k != '\0')
{
cont1++;
k++;
}
k = dest;
while (i != ris)
{
*k = *i;
k++;
i++;
}
for (j = 0; j < cont1; j++)
{
*k = *nuova;
k++;
nuova++;
}
i += cont;
while (*i != '\0')
{
*k = *i;
k++;
i++;
}
*k='\0';
return VERO;
}
else
{
char* dest1 = dest;
while (*i != '\0')
{
*dest1 = *i;
i++;
dest1++;
}
*dest1='\0';
}
return FALSO;
}
Help vi prego.. :cry: :cry: