Problema con esercizio C

di il
2 risposte

Problema con esercizio C

Salve sono alle prime armi con il C e avrei bisogno di un aiuto su questo esercizio:
Dopo aver indicato l’output del seguente programma, riscrivere la funzione f us-
ando l’aritmetica sui puntatori invece dell’indicizzazione dell’array (dovranno essere eliminate
tutte le occorrenze delle variabili i,j e tutti gli usi dell’operatore []).

#include <stdio.h>
char *f (char s[], char t[], char out[]);
int main(void) {
char s[] = "ISBN-978-8884981431";
char t[] = "ISBN-978-8863720181";
char out[30];
printf ("%s\n", f(s,t,out));
return 0;
}
char *f (char s[], char t[], char out[]) {
int i,j;
for (i=0; s == t; i++);
for (j=0; s; j++) out[j] = s[i++];
out[j] = ’\0’;
return &out[0];
}


Non riesco a fare il secondo punto dell'esercizio cioè quello di sostituire i vettori con i puntatori all'interno della funzione. Grazie in anticipo.

2 Risposte

  • Re: Problema con esercizio C

    Salve
    Intanto usa i tag code perché altrimenti il codice sembra incomprensibile.

    Per risolvere l'esercizio basta capire che "char s[]" è praticamente uguale a "char *s".
    Questa è la funzione:
    
    char *f (char* s, char* t, char *out) 
    {
    	int distanza = 0;
    
    	while(*s == *t)
    	{
    		s++;
    		t++;
    	}
    
    	while(*s != '\0')
    	{
    		*out = *s;
    		out++;
    		s++;
    		distanza++;
    	}
    
    	*out = '\0';
    	out -= distanza;
    
    	return out;
    }
    
    Nel primo while fa il confronto dei caratteri delle stringhe ed esce quando trova i caratteri diversi (quando utilizzo "s++" e "t++" incremento l'indirizzo puntato dai puntatori di uno poichè un carattere della stringa occupa un byte) mentre nel secondo copio i caratteri a partire da quello puntato da s (cioè il primo diverso) in out fino a quando trovo '\0' che è il carattere di terminazione della stringa. Nel frattempo è anche aumentato l'indirizzo puntato da out e quindi per stampare tutta la stringa bisogna tornare al suo indirizzo "originario" e per fare ciò ho utilizzato la variabile distanza che ha il compito di tenere di quanto aumenta l'indirizzo di out.
  • Re: Problema con esercizio C

    Grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte