001: // uso di strtok()
002: #include<stdio.h>
003: #include<stdlib.h>
004: 
005: #include<string.h>
006: 
007: int main(int argc, char **argv){
008: 
009:   // stringa da "spezzettare", uso i backslash per indicare che la riga successiva e' comunque parte della stringa
010:   char incipit[] = 
011: "Nel mezzo del cammin di nostra vita   \
012: mi ritrovai per una selva oscura:      \
013: che la diritta via era smarrita.       \
014: E quanto a dir qual era e cosa dura    \
015: esta selva selvaggia et aspra e forte, \
016: che nel pensier rinova la paura!";
017: 
018:   // stringa che contiene i possibili delimitatori, notare che ce ne sono anche di piu' rispetto a quelli necessari
019:   char delimitatori[]= " :.,;'!+-";
020: 
021:   // puntatore che puntera' alle varie sottostringhe man mano individuate
022:   char *word;
023: 
024: 
025:   printf("La stringa da spezzettare e':\n%s\ne si trova all'indirizzo %p\nContiene:\n", incipit, incipit);
026: 
027:   int i=0;
028:   word = strtok(incipit, delimitatori);
029:   while(word)
030:   {
031:     printf("#%d: \t %15s \t %p \n", i,  word, word);
032:     ++i;
033:     word = strtok(NULL, delimitatori);
034:   }
035: 
036:   // la strtok() ha pero' effetti collaterali di cui tener conto!
037:   printf("Al termine delle operazioni se stampo incipit ottengo: %s\n", incipit);
038:   // cosa e' successo? Perche' questo comportamento?
039: 
040:   // stampo carattere per carattere per capire come la strtok ha modificato la stringa originale
041:   for(int i=0; i<sizeof(incipit); ++i)
042:   {
043:     if(incipit[i] >= ' ')
044:       printf("%c", incipit[i]);
045:     else
046:       printf("[%d]", incipit[i]);
047:   }
048:   printf("\n");
049: 
050:   return 0;
051: }
052: 
053: /*
054: La stringa da spezzettare e':
055: Nel mezzo del cammin di nostra vita   mi ritrovai per una selva oscura:      che la diritta via era smarrita.       E quanto a dir qual era e cosa dura    esta selva selvaggia et aspra e forte, che nel pensier rinova la paura!
056: e si trova all'indirizzo 0x7fffb0010330
057: Contiene:
058: #0:                Nel   0x7fffb0010330 
059: #1:              mezzo   0x7fffb0010334 
060: #2:                del   0x7fffb001033a 
061: #3:             cammin   0x7fffb001033e 
062: #4:                 di   0x7fffb0010345 
063: #5:             nostra   0x7fffb0010348 
064: #6:               vita   0x7fffb001034f 
065: #7:                 mi   0x7fffb0010356 
066: #8:           ritrovai   0x7fffb0010359 
067: #9:                per   0x7fffb0010362 
068: #10:               una   0x7fffb0010366 
069: #11:             selva   0x7fffb001036a 
070: #12:            oscura   0x7fffb0010370 
071: #13:               che   0x7fffb001037d 
072: #14:                la   0x7fffb0010381 
073: #15:           diritta   0x7fffb0010384 
074: #16:               via   0x7fffb001038c 
075: #17:               era   0x7fffb0010390 
076: #18:          smarrita   0x7fffb0010394 
077: #19:                 E   0x7fffb00103a4 
078: #20:            quanto   0x7fffb00103a6 
079: #21:                 a   0x7fffb00103ad 
080: #22:               dir   0x7fffb00103af 
081: #23:              qual   0x7fffb00103b3 
082: #24:               era   0x7fffb00103b8 
083: #25:                 e   0x7fffb00103bc 
084: #26:              cosa   0x7fffb00103be 
085: #27:              dura   0x7fffb00103c3 
086: #28:              esta   0x7fffb00103cb 
087: #29:             selva   0x7fffb00103d0 
088: #30:         selvaggia   0x7fffb00103d6 
089: #31:                et   0x7fffb00103e0 
090: #32:             aspra   0x7fffb00103e3 
091: #33:                 e   0x7fffb00103e9 
092: #34:             forte   0x7fffb00103eb 
093: #35:               che   0x7fffb00103f2 
094: #36:               nel   0x7fffb00103f6 
095: #37:           pensier   0x7fffb00103fa 
096: #38:            rinova   0x7fffb0010402 
097: #39:                la   0x7fffb0010409 
098: #40:             paura   0x7fffb001040c 
099: Al termine delle operazioni se stampo incipit ottengo: Nel
100: Nel[0]mezzo[0]del[0]cammin[0]di[0]nostra[0]vita[0]  mi[0]ritrovai[0]per[0]una[0]selva[0]oscura[0]      che[0]la[0]diritta[0]via[0]era[0]smarrita[0]       E[0]quanto[0]a[0]dir[0]qual[0]era[0]e[0]cosa[0]dura[0]   esta[0]selva[0]selvaggia[0]et[0]aspra[0]e[0]forte[0] che[0]nel[0]pensier[0]rinova[0]la[0]paura[0][0]
101: */
102: 


Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it