Compattazione vettore stringhe

di thomas99 il
10 risposte
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

  • La strcat agisce su stringhe non su caratteri
  • 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?
  • 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
  • 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]
  • 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';
    }
  • 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 !=)?
  • 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?
  • 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"
  • 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]);
  • 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