darkmax
16-05-2005, 16:34
Ecco il programma:
Scrivere un programma che permette di cercare la prima occorrenza di una sottostringa p[] all'interno di un'altra stringa q[], e creare una nuova stringa s[] corrispondente a una copia di q[] dalla quale sia stata cancellata p[]. Il programma deve chiedere in sequenza q e p. Se p non e` una sottostringa di q il programma lo segnala, altrimenti crea s come richiesto e la stampa.
Si assuma che tutte le stringhe abbiano dimensione massima MAXSTR=128.
Esempio di elaborazione.
Introduci la stringa: topolino
Introduci la sottostringa da cancellare: lin
Cancellando lin da topolino si ottiene topoo
oppure
Introduci la stringa: topolino
Introduci la sottostringa: pippo
Errore: pippo non e` sottostringa di topolino.
Definire il tipo Bool e le costanti TRUE e FALSE come visto a lezione.
Definire le seguenti funzioni.
Bool cerca_e_cancella(char p[], char q[], char s[]): cerca q[] in p[]; se la trova genera s[] come da specifiche, e ritorna TRUE; se p[] non e` sottostringa di q[] ritorna FALSE.
void copia(char s[], char t[], int k, int n): copia s[] in t[], saltando i caratteri di s[] nelle posizioni da k a n (incluse). La funzione deve essere "autonoma", cioe` controllare la coerenza di k e n, e non modificare t se gli estremi specificati non sono validi (es: k<n, oppure n corrisponde ad una posizione non appartenente a s,...).
Io l'ho fatto cosė.. Ma non riesco a mettere la funzione cerca e cancella e far riscrivere la stringa senza quella sottostringa.. mi aiutate?
#include <stdio.h>
typedef enum{FALSE,TRUE} bool;
bool sottostringa(char pattern[], char testo[]);
int main()
{
char testo[5],pattern[5];
printf("Inserisci la stringa in cui cercare: ");
gets(testo);
printf("Inserisci il pattern da ricercare: ");
gets(pattern);
bool ris = sottostringa(pattern, testo);
if (ris==TRUE)
printf("E' stata trovata un'occorrenza di %s in %s.\n",pattern,testo);
else
printf("Non e' stata trovata un'occorrenza di %s in %s.\n",pattern,testo);
system("PAUSE");
}
bool sottostringa(char pattern[], char testo[])
{
int i,j;
int ris=0;
if(strlen(pattern) > strlen(testo))
return FALSE;
for (i=0; i+strlen(pattern) <= strlen(testo);i++)
{
for (j=0; j < strlen(pattern); j++)
{
if (pattern[j] == testo[i+j])
ris++;
else
break;
}
if (ris == strlen(pattern))
return TRUE;
else
ris = 0;
}
return FALSE;
}
Scrivere un programma che permette di cercare la prima occorrenza di una sottostringa p[] all'interno di un'altra stringa q[], e creare una nuova stringa s[] corrispondente a una copia di q[] dalla quale sia stata cancellata p[]. Il programma deve chiedere in sequenza q e p. Se p non e` una sottostringa di q il programma lo segnala, altrimenti crea s come richiesto e la stampa.
Si assuma che tutte le stringhe abbiano dimensione massima MAXSTR=128.
Esempio di elaborazione.
Introduci la stringa: topolino
Introduci la sottostringa da cancellare: lin
Cancellando lin da topolino si ottiene topoo
oppure
Introduci la stringa: topolino
Introduci la sottostringa: pippo
Errore: pippo non e` sottostringa di topolino.
Definire il tipo Bool e le costanti TRUE e FALSE come visto a lezione.
Definire le seguenti funzioni.
Bool cerca_e_cancella(char p[], char q[], char s[]): cerca q[] in p[]; se la trova genera s[] come da specifiche, e ritorna TRUE; se p[] non e` sottostringa di q[] ritorna FALSE.
void copia(char s[], char t[], int k, int n): copia s[] in t[], saltando i caratteri di s[] nelle posizioni da k a n (incluse). La funzione deve essere "autonoma", cioe` controllare la coerenza di k e n, e non modificare t se gli estremi specificati non sono validi (es: k<n, oppure n corrisponde ad una posizione non appartenente a s,...).
Io l'ho fatto cosė.. Ma non riesco a mettere la funzione cerca e cancella e far riscrivere la stringa senza quella sottostringa.. mi aiutate?
#include <stdio.h>
typedef enum{FALSE,TRUE} bool;
bool sottostringa(char pattern[], char testo[]);
int main()
{
char testo[5],pattern[5];
printf("Inserisci la stringa in cui cercare: ");
gets(testo);
printf("Inserisci il pattern da ricercare: ");
gets(pattern);
bool ris = sottostringa(pattern, testo);
if (ris==TRUE)
printf("E' stata trovata un'occorrenza di %s in %s.\n",pattern,testo);
else
printf("Non e' stata trovata un'occorrenza di %s in %s.\n",pattern,testo);
system("PAUSE");
}
bool sottostringa(char pattern[], char testo[])
{
int i,j;
int ris=0;
if(strlen(pattern) > strlen(testo))
return FALSE;
for (i=0; i+strlen(pattern) <= strlen(testo);i++)
{
for (j=0; j < strlen(pattern); j++)
{
if (pattern[j] == testo[i+j])
ris++;
else
break;
}
if (ris == strlen(pattern))
return TRUE;
else
ris = 0;
}
return FALSE;
}