|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
[C] Separatore di stringhe
Raga ho scritto questo codice per separare/estrarre, qualora mi dovesse servire, una sottostringa da una stringa originaria formattata in un determinato modo!
Es: ho la stringa: Quote:
questo codice mi dovrebbe permettere di estrarre a piacere una delle quattro frasi/parole che si trovano tra ogni |, ma ci deve stare qualche errore subdolo: Codice:
char *separa(char *stringa, int occorrenze)
{
int numero; // contatore globale
int num; // contatore locale
char *destinazione=NULL;
destinazione=(char *)malloc(sizeof(strlen(stringa))+1);
numero=0;
while (occorrenze>0)
{
num=0;
while(stringa[numero]!='|')
{
destinazione[num]=stringa[numero];
numero++;
num++;
}
destinazione[num] = '\0';
occorrenze--;
numero++;
}
return destinazione;
}
[code] int main() { char *temp=NULL; char *origine="ciao mamma|2|prr|"; temp=separa(origine,2); //mi restituisce 2 system("PAUSE"); return 0; } se però eseguo più di una volta la chiamata quella funzione si verificano anomalie nel funzionamento del programma.....perchè? dove sbaglio?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
Codice:
destinazione=(char *)malloc(sizeof(strlen(stringa))+1); Comunque, io l'avrei fatto così (permettimi di postare una mia soluzione Codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *separa (char *str, int index)
{
char *s = str;
char *p;
char *ret;
int len;
/*---- Cerca l'inizio della sotto-stringa ----*/
while (index-- > 0)
{
if ((p = strchr (s, '|')) != NULL)
s = p+1;
else
return NULL;
}
/*---- Cerca la fine (e lunghezza) della sotto-stringa ----*/
if ((p = strchr (s, '|')) != NULL)
len = p - s;
else
len = strlen (s);
/*---- Alloca memoria e copia ----*/
if ((ret = (char *) malloc (len+1)) != NULL)
{
strncpy (ret, s, len);
ret[len] = '\0';
}
return ret;
}
int main (void)
{
char *origine = "ciao mamma|2|prr";
char *r;
r = separa (origine, 0);
printf ("[%s]\n", r); /* Stampa "ciao mamma" */
free (r);
r = separa (origine, 1);
printf ("[%s]\n", r); /* Stampa "2" */
free (r);
r = separa (origine, 2);
printf ("[%s]\n", r); /* Stampa "prr" */
free (r);
return 0;
}
Ciao.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
perfetto, ti ringrazio..la tua soluzione funziona a meraviglia
vorresti dare uno sguardo anche qui: http://www.hwupgrade.it/forum/showthread.php?t=1109604 ancora grazie
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:50.



















