Esercizio aritmetica dei puntatori

di il
4 risposte

Esercizio aritmetica dei puntatori

Aiuto con questo esercizio!! come riscrivo la funzione con l'aritmetica dei puntatori?

Riscrivere la seguente funzione usando l’aritmetica sui puntatori invece dell’indicizzazione
dell’array (eliminare le variabili i,j,k e tutti gli usi dell’operatore []). Sapreste indicare cosa fa
la funzione e cosa viene stampato se viene eseguito il main seguente?

#include <stdio.h>
int f(char s[], char t[]) {
int i,j,k;
for(i=0; s[i]!=’\0’; i++) {
   for(j=i,k=0; t[k] != ’\0’ && s[j]==t[k]; j++,k++)
     ;
 if(k>0 && t[k] == ’\0’)
     return i;
}
return -1;
}
int main(void) {

char a[]="maritare";
char b[]="arit";
char c[]="arito";
char d[]="ugo";
char e[]="tare";
printf("Valore della chiamata: %d\n", f(a,b));
printf("Valore della chiamata: %d\n", f(a,c));
printf("Valore della chiamata: %d\n", f(a,d));
printf("Valore della chiamata: %d\n", f(a,e));
return 0;
}
avevo pensato così ma non mi trovo:

int f(char *s, char *t) {
int i,j,k;
char *p=s;

for (; *s!='\0';s++) 
{
 for(*p=*s; *t!='\0' && *p==*t; *t++)
     ;
  if(*t == '\0')
    return *(s++);
}
return -1;
}

4 Risposte

  • Re: Esercizio aritmetica dei puntatori

    Non sapendo cosa deve fare la funzione risulta difficile aiutarti.
    
    int f(char *s, char *t)
    {
        char *p=s;
        for (; *s!='\0';s++)
        {
            *p = *s;
            while( *s++ == *t++);
            if( p != s - 1)
                return s-p;
        }
        return -1;
    }
    
    Considera che ci ho dato a spanazza.
  • Re: Esercizio aritmetica dei puntatori

    Purtroppo la funzione non da il risultato che mi interessa, cmq grazie

    L'output del programma è questo:

    Il programma da in output la posizione della prima lettera uguale tra le due stringhe solamente se la stringa 2 è completamente contenuta nella stringa iniziale, ed è perfettamente corrispondente e ordinata. In tutti gli altri casi da -1.
    
    Valore della chiamata: 1
    Valore della chiamata: -1
    Valore della chiamata: -1
    Valore della chiamata:4
    
    mi vuoi aiutare sto uscendo pazzo
  • Re: Esercizio aritmetica dei puntatori

    1)memorizzi il puntatore iniziale
    2)lo scorri fintanto non trovi una lettera uguale altrimenti esci con l'errore
    3)memorizzi posizione
    4)esegui il confronto e se termina corretto restituisci la posizione che sarà posizione primo carattere - posizione start
    
    int instr(char* s, char* f)
    {
    //1
        char* st = s;
    //2
        for ( ; *s && (*s != *f) ; s++);
    
        if (!*s) return -1;
    //3
        char* steq = s;
    //4
        for ( ; (*s && *f) && (*s == *f) ; s++, f++);
    
        if (*f) return -1;
    
        return steq - st;
    }
    
  • Re: Esercizio aritmetica dei puntatori

    Grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte