Salve, sto affrontando questo problema:
Verifica che la prima stringa data in input contenga un'occorrenza sempre data in input dall'utente. Se nella stringa è inclusa l'occorrenza, eliminala e stampa la nuova stringa. ***Utilizzare le chiamate per riferimento e nei cicli for utilizzare i puntatori.
Questo è un esercizio che mi è stato posto all'università. La mia idea è quella di leggere i due input, chiamare la funzione verifica che ha il compito di verificare se nella prima stringa c'è l'occorrenza. Se l'occorrenza è presente, viene eliminata dalla stringa e in seguito viene stampato il nuovo valore della variabile stringa.
Non ho avuto grandi problemi e nel mio programma l'occorrenza viene eliminata. Tuttavia, quando ad esempio è richiesto di eliminare l'ultima lettere di una stringa tipo:
stringa: casacanelupo
occorrenza: o
L'occorrenza dalla stringa non viene eliminata e quando chiamo la funzione printf, mi stampa la stringa senza l'eliminazione della lettera finale, il codice:
#include <stdio.h>
#include <stdlib.h>
#define N 80
int elimina(char *an, int n){
char *p;
int i=0;
while(i<n){
for(p=an; *p!='\0'; p++){
*p=*(p+1);
}
i++;}
return 0;
}
int verifica(char *a, char *b){
char *p, *s;
int contatore=1;
while(*a!='\0'){
p=a; s=b;
contatore=1;
while((*p==*s)&&(*p!='\t')&&(*p!=' ')){
p++;
s++;
contatore++;
}
if(*s=='\0') {
elimina(a, contatore); return 0;
}
a++;
}
return 0;
}
int main(void){
char A[N+1], B[N+1];
printf("Insersci la frase(Max 80 caratteri): ");
gets(A);
printf("Inserisci l'occorrenza(Max 80 caratteri); ");
gets(B);
verifica(A, B);
puts(A);
return 0;
}
Aspetto vostre risposte.