PDA

View Full Version : [C]Copiare più stringhe in un Array


neski
09-01-2013, 22:14
Ciao a tutti sono ancora all'inizio con il c e ho un problema:muro: come ho scritto nel titolo vorrei copiare più stringhe in un unico array di stringhe e poi dare l'output,faccio un esempio per spiegarmi meglio:


#include <stdlib.h>
#include <stdio.h>


int main(){

int i;
char string1[10]={"CANE"};
char string2[10]={"GATTO"}
char array[30];


//*Ecco qua vorrei mettere l'inserimento delle stringhe in un unico array*/
......

/* E infine leggere l'array*/

for(i=0; i<2; i++){

printf("%s",array[i]);

}
}


Qualcuno sa come aiutarmi?scusate comunque grazie in anticipo :)

AllerITA
10-01-2013, 07:07
puoi usare prima strcpy poi strcat all'array che devi creare concatenando le due stringhe.

poi stampare l'intero array così ottenuto non come hai fatto tu.


#include <stdlib.h>
#include <stdio.h>


int main(){

int i;
char string1[10]="CANE";
char string2[10]="GATTO"
char array[30];


// copia di stringa

strcpy(array,string1);

// concatenazione di stringa

strcat(array, " ");
strcat(array,string2);

//e in fine stampa

printf("%s",array);


}



così dovrebbe funzionare

Vincenzo1968
10-01-2013, 16:17
Puoi usare una array di puntatori a char come suggerito da Antonio:


#include <stdlib.h>
#include <stdio.h>

#define RIGHE 21

int main()
{
int i;
char *array[RIGHE] = {"CANE", "GATTO"};

for(i = 0; i < RIGHE; i++)
{
if ( array[i] )
printf("\n%s\n\n", array[i]);
}

return 0;
}


;)

Vincenzo1968
10-01-2013, 17:36
Un piccolo miglioramento al codice. Puoi calcolare il numero di stringhe dell'array al volo(a runtime) con l'operatore sizeof in modo da evitare, all'interno del ciclo, di verificare se l'i-esimo elemento è NULL:


#include <stdlib.h>
#include <stdio.h>

int main()
{
int i;
int count;

char *array[] = {"CANE", "GATTO", "PESCE", "TOPO DI FOGNA"};

count = sizeof(array)/sizeof(char*);

for(i = 0; i < count; i++)
{
printf("\n%s\n\n", array[i]);
}

return 0;
}

Vincenzo1968
10-01-2013, 17:50
Altrimenti, se non ti piace l'operatore sizeof, puoi utilizzare un puntatore a char per verificare la fine dell'array di stringhe(ma ti devi ricordare di inserire NULL al termine della lista di stringhe quando inizializzi l'array):


#include <stdlib.h>
#include <stdio.h>

int main()
{
int i;
char *s = NULL;

char *array[] = {"CANE", "GATTO", "PESCE", "BISONTE", "GNU", NULL};

i = 0;
while( s = array[i++] )
{
printf("\n%s\n\n", s);
}

return 0;
}

Vincenzo1968
10-01-2013, 18:45
Infine, non consigliato per la leggibilità, ma per completezza la riporto ugualmente, c'è la versione con aritmetica dei puntatori:


#include <stdlib.h>
#include <stdio.h>

int main()
{
char **s = NULL;
char *array[] = {"CANE", "GATTO", "PESCE", "BISONTE", "GNU", NULL};

s = array;
while( (*s) )
{
printf("\n%s\n", (*s++));
}

printf("\nLa prima stringa dell'array: \"%s\"\n", array[0]);

printf("\nPremi INVIO(RETURN) per terminare.\n");
getc(stdin);

return 0;
}

neski
10-01-2013, 18:46
Grazie mille per le risposte!:) ma come al solito mi sono spiegato male.....
io sto cercando di fare una cosa del genere:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define lin 10

typedef struct {


char dom[lin];
char risp_1[lin];
char risp_2[lin];

}dati;

void copia(){

dati dom[100]={

{" Gatto"},
{"Cane"}

};

void copia(){

int i;
char array[100](o con un puntatore);


///* e qua vorrei mettere ogni stringa dentro a questo alla variabile array,e riuscirle a leggerle in questo modo:*///

for(i=0; i<2; i++){

printf("%s\n",array[i]);

}

}

int main(){


copia();
return 0;
}


Mi manca quella parte centrale per inserire le stringhe nell array:doh:

AllerITA
11-01-2013, 07:54
come ti ho indicato per copiare una stringa in un array di stringhe devi usare:

strcpy (http://msdn.microsoft.com/en-us/library/kk6xf663(v=VS.100).aspx)

quindi se hai un array di char così:


//caso 1
char stringa[10]="CANE";
//oppure
//caso 2
char stringa[]="CANE"
//oppure
//caso 3
const char *stringa="CANE"
//oppure
//caso 4
typedef struct MYTYPE {
stringa[10];
.....
} MYTYPE;

//inizializzata così:
MYTYPE a= { .stringa="CANE", ....}



puoi cpiarla nell'array di stringhe:


char array[100];


rispettivamente così


//caso 1,2,3
strcpy(array,stringa);
//caso 4
strcpy(array,a.stringa);


in maniera analoga se vuoi appendere la stringa a un array che
contiene già delle stringhe usa

strcat (http://msdn.microsoft.com/en-us/library/h1x0y282(v=vs.100).aspx)

con sole queste due funzioni puoi copiare e appendere tutte le stringhe
che vuoi, attenzione a un accorgimento la stringa deve comprendere anche
il terminatore di stringa '\0'.