Salve a tutti,
premesso di conoscere la funzione strtok per dividere una frase in più parole mediante caratteri separatori, vorrei sapere un metodo per dividere la parola in un primo momento con un carattere separatore e in un secondo momento con un altro.

Per comprendere meglio posto un esempio:
ho la stringa: "15:10 s" io vorrei ottenere

parola[0]=15; 
parola[1]=10; 
parola[3]=s;

Normalmente potrei usare strtok e mettere come caratteri separatori " :" (vale a dire spazio e due punti), ma in questo caso non posso perché la stringa "15 : 10 s" non mi andrebbe bene. In definitiva vorrei forzare il fatto che la stringa vada bene solo se non vi siano spazi tra i numeri e i due punti.
Ancora per comprendere meglio:

"15:10 s"   // corretta
"15 : 10 s" // sbagliata

Da come avrete capito, il mio problema è usare prima i due punti come carattere separatore e poi lo spazio. Spero di essere riuscito a spiegarmi bene e ringrazio già da ora chi presterà attenzione a questa mia domanda.

chiesto 24 Nov '13, 13:11

Domix's gravatar image

Domix
25114

modificato 24 Nov '13, 13:50

enzotib's gravatar image

enzotib ♦♦
14.0k113186


Se apri la pagina di manuale di strtok c'è proprio come esempio un programma completo che fa questo:

   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>

   int
   main(int argc, char *argv[])
   {
       char *str1, *str2, *token, *subtoken;
       char *saveptr1, *saveptr2;
       int j;

       if (argc != 4) {
           fprintf(stderr, "Usage: %s string delim subdelim\n",
                   argv[0]);
           exit(EXIT_FAILURE);
       }

       for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
           token = strtok_r(str1, argv[2], &saveptr1);
           if (token == NULL)
               break;
           printf("%d: %s\n", j, token);

           for (str2 = token; ; str2 = NULL) {
               subtoken = strtok_r(str2, argv[3], &saveptr2);
               if (subtoken == NULL)
                   break;
               printf(" --> %s\n", subtoken);
           }
       }

       exit(EXIT_SUCCESS);
   }

e che prende come parametri una stringa, un delimitatore principale e un delimitatore secondario e restituisce i vari token:

$ ./prog_esempio  "12:10 s"  " "  ":"
1: 12:10
 --> 12
 --> 10
2: s
 --> s
coll. permanente

ha risposto 24 Nov '13, 14:50

enzotib's gravatar image

enzotib ♦♦
14.0k113186

modificato 24 Nov '13, 15:42

potresti incollarmi il link di questo esempio per favore?

(24 Nov '13, 15:30) Domix Domix's gravatar image

@Domix: vedi risposta modificata

(24 Nov '13, 15:43) enzotib ♦♦ enzotib's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×110
×22

domanda posta: 24 Nov '13, 13:11

domanda visualizzata: 2,295 volte

ultimo aggiornamento: 24 Nov '13, 15:43

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.