View Full Version : [C]Copiare più stringhe in un Array
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;
}
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'.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.