Esercizio aritmetica dei puntatori

di Anonimizzato13739 il
4 risposte
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

  • 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.
  • 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
  • 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;
    }
    
  • Grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte