Compattazione vettore stringhe

di il
10 risposte

Compattazione vettore stringhe

Salve, ho un problema nel realizzare questa funzione che permette di compattare un vettore di stringhe, cosa ho sbagliato? Grazie.
ES:
Vett1 = {mario,rossi,anna,bianchi,john,doe,0} => {mariorossi,annabianchi,johndoe,0}

La funzione che ho realizzato è la seguente:

void CompattaVett1(char Vett1[DIM][LUN]){
	int i = 0;

	while(Vett1[i][LUN] != '0'){
		Vett1[i][LUN] = strcat(Vett1[i][LUN],Vett1[i+1][LUN]);           <---il compilatore qui segna vari errori 
		i = i + 2;
	}
	Vett1[i][LUN] = '0';
	
}

10 Risposte

  • Re: Compattazione vettore stringhe

    La strcat agisce su stringhe non su caratteri
  • Re: Compattazione vettore stringhe

    Vett1 è un vettore di stringhe del tipo {mario,rossi,anna,bianchi,john,doe,0} ,se io nella strcat inserisco in input
    (Vett1[i][LUN],Vett1[i+1][LUN])
    non sto inserendo due stringhe? ovvero per i = 0 , sto passando in input la stringa mario e la stringa rossi?
  • Re: Compattazione vettore stringhe

    thomas99 ha scritto:


    Vett1 è un vettore di stringhe del tipo {mario,rossi,anna,bianchi,john,doe,0} ,se io nella strcat inserisco in input
    (Vett1[i][LUN],Vett1[i+1][LUN])
    non sto inserendo due stringhe? ovvero per i = 0 , sto passando in input la stringa mario e la stringa rossi?
    Ad ogni [] stai dereferenziando, quindi se hai un char*[] e scrivi [ i ][LUN] ottieni un char, oltre al fatto che non dovresti accedere all’elemento di posizione LUN assumendo che LUN sia la lunghezza massima della stringa.

    Credo tu non sappia usare le matrici
  • Re: Compattazione vettore stringhe

    thomas99 ha scritto:


    Vett1 è un vettore di stringhe del tipo {mario,rossi,anna,bianchi,john,doe,0} ,se io nella strcat inserisco in input
    (Vett1[i][LUN],Vett1[i+1][LUN])
    non sto inserendo due stringhe? ovvero per i = 0 , sto passando in input la stringa mario e la stringa rossi?
    Le stringhe sono Vett1[ i ] e Vett[i+1]
  • Re: Compattazione vettore stringhe

    Ho provato a modificare il codice in questo modo , ma continua a darmi vari errori.
    
    void CompattaVett1(char Vett1[DIM][LUN]){
    	int i = 0;
    
    	while(Vett1[i] != '0'){
    		Vett1[i] = strcat(Vett1[i],Vett1[i+1]);
    		i = i + 2;
    	}
    	Vett1[i] = '0';
    }
  • Re: Compattazione vettore stringhe

    No, non hai capito i vettori di stringhe (o comunque matrici)…

    Vett1[ i ] è una stringa?
    Invece '0' è una stringa?
    Due stringhe si comparano con l’operatore == (o equivalentemente !=)?
  • Re: Compattazione vettore stringhe

    Riguardo alla terza domanda so rispondere e posso dire di essermi dimenticato di utilizzare la funzione strcmp, invece per la prima so che una stringa viene dichiarata con
    char stringa[DIM][LUN]
    , però dopo all'interno della funzione non so come richiamarla perchè se scrivo
    Vett1[i]
    dovrebbe essere sbagliato in quanto così è un vettore di caratteri e non un vettore di stringhe , ma non saprei come altro scriverlo visto che se scrivessi
    Vett1[i][LUN]
    questo indicherebbe un carattere e non una stringa.
    Riguardo alla seconda domanda , '0' è un carattere , ma non può essere visto come se fosse una stringa?
  • Re: Compattazione vettore stringhe

    Stai facendo un bel po' di confusione.

    Una stringa è un vettore di char.
    Un vettore di stringhe è un vettore di vettori di char.

    Prima di tutto '0' è il carattere 0
    Se vuoi la stringa la scrivi con "0"
  • Re: Compattazione vettore stringhe

    La funzione strcat dovrebbe concatenare due stringhe , quindi se ho la stringa Mario e la stringa Rossi , la funzione dovrebbe dare in output la stringa MarioRossi.
    Rivedendo la funzione , effettivamente va corretta semanticamente, ma per quanto riguarda la sintassi, il mio dubbio è come va scritta la funzione strcat.
    l'ho scritta bene adesso?
    Vett1[i][LUN] = strcat(Vett1[i],Vett1[i+1]);
  • Re: Compattazione vettore stringhe

    Questo

    Vett1[ i ][ LUN ]

    è sbagliato! NON è una stringa! E' il carattere LUN-esimo della stringa i-esima (che fra l'altro non esiste).
    E NON ti serve assegnare la strcat. Ti basta

    strcat(Vett1[ i ],Vett1[i+1]);

    Devi studiare meglio le stringhe e la loro gestione.

    Se devi concatenare inoltre, la stringa di destinazione deve avere lo spazio a disposizione per contenere tutti i caratteri del risultato.

    Mostra anche il main la prossima volta che mostri il codice.
Devi accedere o registrarti per scrivere nel forum
10 risposte