PDA

View Full Version : [C] Problema ad aggiungere funzione!!


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;
}

darkmax
16-05-2005, 18:02
up

darkmax
17-05-2005, 10:09
:(

cionci
17-05-2005, 10:56
A copia devi passare i (che l'indice di inizio della sottostringa) e la lunghezza della sottostringa (ris)...

Fai pių grande testo...č assurdo metterlo 5...
Ovviamente devi allcare t prima di chiamare la copia...

L'operazione di copia č banale...
Fai un for da 0 alla lunghezza di s...
Ti tieni un indice per contare la posizione del prossimo elemento da inserire in t...
Se l'indice del for č uguale a k incrementi l'indice del for di n...