|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
[C] Problema ad aggiungere funzione!!
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; } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
up
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:18.



















