Trova l'occorrenza ed eliminala

di il
2 risposte

Trova l'occorrenza ed eliminala

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.

2 Risposte

  • Re: Trova l'occorrenza ed eliminala

    A occhio direi che il controllo di fine stringa da ricercare deve essere fatta nel ciclo
    
       while(*a!='\0'){
          p=a; s=b;
          contatore=1;
          
          while((*p==*s)&&(*p!='\t')&&(*p!=' ')){
             p++;
             s++;
    
    		 if(*s=='\0')
     		 {
    			 elimina(a, contatore); 
    			 return 0;
    		 };
             contatore++;
          }
    
    	  a++;
       }
       
  • Re: Trova l'occorrenza ed eliminala

    oregon ha scritto:


    A occhio direi che il controllo di fine stringa da ricercare deve essere fatta nel ciclo
    
       while(*a!='\0'){
          p=a; s=b;
          contatore=1;
          
          while((*p==*s)&&(*p!='\t')&&(*p!=' ')){
             p++;
             s++;
    
    		 if(*s=='\0')
     		 {
    			 elimina(a, contatore); 
    			 return 0;
    		 };
             contatore++;
          }
    
    	  a++;
       }
       
    Grazie Oregon, tutto risolto.
Devi accedere o registrarti per scrivere nel forum
2 risposte