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
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it