Aritmetica dei puntatori

di il
10 risposte

Aritmetica dei puntatori

Salve a tutti ho questo esercizio e devo rifarlo con l'aritmetica dei puntatori

#include<stdio.h>
#include<string.h>
int f(char s[], char t[]){
int i,j;
int n=strlen(s)-1;
int m=strlen(t)-1;
if (n>m) return -1;
for (i=n, j=m; i>=0 && j>=0; i--,j--)
if ((s[i] != t[j])) return i+1;
return 0;
}
int main(void) {
char a[]="ore";
char b[]="colore";
char c[]="bianco";
char d[]="mare";
printf("Valore della chiamata: %d\n", f(a,a));
printf("Valore della chiamata: %d\n", f(a,b));
printf("Valore della chiamata: %d\n", f(b,a));
printf("Valore della chiamata: %d\n", f(a,c));
printf("Valore della chiamata: %d\n", f(a,d));
return 0;
}
io ho fatto cosi ma quando l'if non è verificato mi restituisce sempre 0, perchè?

int f(char *s, char *t){
char *s1;

s1=s;
s=='\0', t=='\0';
if (s>t) return -1;

for (*s='\0'-1, *t='\0'-1;*s && *t; s--,t--)
if ((*s != *t)) return s1-s;
return 0;
}

10 Risposte

  • Re: Aritmetica dei puntatori

    Non ho capito perché non hai scritto così
    
    int f1(char *s, char *t) {
    	int i, j;
    	int n = strlen(s) - 1;
    	int m = strlen(t) - 1;
    
    	if (n>m) return -1;
    
    	for (i = n, j = m; i >= 0 && j >= 0; i--, j--)
    		if ((*(s+i) != *(t+j))) return i + 1;
    	return 0;
    }
  • Re: Aritmetica dei puntatori

    Non ho scritto cosi perchè non devo usare le variabili i, j, n e m
  • Re: Aritmetica dei puntatori

    Non lo avevi detto ...

    Ma puoi scrivere

    if (strlen(s)>strlen(t)) return -1;

    ?
  • Re: Aritmetica dei puntatori

    oregon ha scritto:


    Non lo avevi detto ...

    Ma puoi scrivere

    if (strlen(s)>strlen(t)) return -1;

    ?
    Si potrei, però l'if(s>t) funziona anche cosi, il problema è nel for che dovrebbe restituirmi, per esempio nella 3a chiamata 3, ma invece restituisce sempre 0
  • Re: Aritmetica dei puntatori

    Guarda che

    s>t

    è tutt'altra cosa. E' sbagliata. In questo modo confronti due puntatori, non la lunghezza delle stringhe puntate. Non ha senso.

    Devi usare la strlen per il confronto.
  • Re: Aritmetica dei puntatori

    oregon ha scritto:


    Guarda che

    s>t

    è tutt'altra cosa. E' sbagliata. In questo modo confronti due puntatori, non la lunghezza delle stringhe puntate. Non ha senso.

    Devi usare la strlen per il confronto.
    Cosi confronto i due puntatori e basta? E per farmi ritornare il valore desiderato nel for come devo fare?
  • Re: Aritmetica dei puntatori

    Devi confrontare due puntatori ausiliari dopo che li hai portati alla fine della stringa. Forse è meglio che dai un'occhiata a questo codice
    
    int f(char *s, char *t) {
    	char *s1 = s, *t1 = t;
    
    	while (*(++s1));
    	while (*(++t1));
    
    	if (s1-s-1>t1-t-1) return -1;
    	
    	for (s1 = s1-1, t1=t1-1; (s1-s+1) && (t1-t+1); s1--, t1--)
    		if ((*s1 != *t1)) return s1 - s + 1;
    	
    	return 0;
    }
    
  • Re: Aritmetica dei puntatori

    oregon ha scritto:


    Devi confrontare due puntatori ausiliari dopo che li hai portati alla fine della stringa. Forse è meglio che dai un'occhiata a questo codice
    
    int f(char *s, char *t) {
    	char *s1 = s, *t1 = t;
    
    	while (*(++s1));
    	while (*(++t1));
    
    	if (s1-s-1>t1-t-1) return -1;
    	
    	for (s1 = s1-1, t1=t1-1; (s1-s+1) && (t1-t+1); s1--, t1--)
    		if ((*s1 != *t1)) return s1 - s + 1;
    	
    	return 0;
    }
    
    ho capito ora, grazie mille oregon l'assegnazione al puntatore, cioè s='\0' era proprio una "cagata", permettimi il termine. Grazie mille ancora
  • Re: Aritmetica dei puntatori

    Permettimi di concordare sul termine ...
  • Re: Aritmetica dei puntatori

    oregon ha scritto:


    Permettimi di concordare sul termine ...
Devi accedere o registrarti per scrivere nel forum
10 risposte