PDA

View Full Version : [c] scomporre una stringa


*MATRIX*
30-08-2008, 15:36
ciao raga

avrei una domanda da farvi

ho una stringa di questo tipo

parola1#parola2

cioč una stringa formatada due parole divise da un cancelletto

devo scomporre le due parole e visualizzarle una sotto l'altra a video eliminando il cancelletto
ovvero
esempio

cane#gatto

output

cane
gatto

che voi sappiate esiste una funzione che elimina una determinata lettera da una stringa ?

sottovento
30-08-2008, 15:41
in C no, ma puoi risolvere piuttosto semplicemente utilizzando la strchr() in modo da trovare il carattere in questione.

Per esempio, supponendo che p = "Cane#Gatto";

char *q = strchr (p, '#');
if (q)
{
*q++ = '\0';
printf ("Separatore trovato. Prima parola: %s Seconda parola: %s\n", p, q);
}
else
{
printf ("Separatore non trovato\n");
}

DanieleC88
30-08-2008, 16:55
Dannati bot... vabbe'. Prova a dare uno sguardo anche a strtok().

*MATRIX*
31-08-2008, 10:32
#include <stdio.h>
#include <string.h>

int main()
{
char s[] = "gatto#cane";
char* p;
printf("Stringa completa: \n %s\nStringa spezzata:\n",s);
p = strtok(s, "#");
while (p != NULL)
{
printf("%s\n", p);
p = strtok(NULL, "#");
}
return 0;
}


ecco ora dovrei passare i due dati in delle stringhe cme poso fare?

cioč usare due variabili stringa 1 e stringa2 alle quali verranno assegnati rispettivamente cane e gatto

come posso fare?

*MATRIX*
31-08-2008, 10:51
/* Esempio con un carattere separatore */
#include <stdio.h>
#include <string.h>

int main()
{
char *info,*file;
char s[] = "cane#gatto";
char* p;
printf("Stringa completa: \n %s\nStringa spezzata:\n",s);
p = strtok(s, "#");
while (p != NULL)
{
sprintf(info ,"%s", p);
p = strtok(NULL, "#");
sprintf(file ,"%s", p);
p = strtok(NULL, "#");
}
printf("info =%s\n",info);
printf("FILE = %s\n",file);
return 0;
}



va in segmentation fault

dove sbaglio?

Isildur84
31-08-2008, 11:12
Anticipo che non conosco l'utilizzo di sprinf ma il tuo programma ha almeno due errori: hai aggiunto un ciclo e poi non lo usi, non ha senso usare nel ciclo per due volte p = strtok; secondo, tu memorizzi, penso, l'indirizzo della variabile p in info e in file, non il contenuto. Se vuoi memorizzare il contenuto fai info = strdup(p).

DanieleC88
31-08-2008, 12:14
Il problema č che info e file non sono mai inizializzate, usa strdup().