[C] String tokenizen naar array

Pagina: 1
Acties:

  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 20-12-2025
Ik heb een klein probleempje met C. Ik probeer een string te tokenizen (via strtok) naar een array. Opzich gaat het tokenizen wel goed. Ik kan, net zoals in alle examples op het net, de resultaten zonder problemen op beeld afdrukken. Echter ik wil ze graag in een array hebben, zodat ik ze op die manier kan uitvragen....

code:
1
2
3
4
5
          if ((TOKENS = strtok(CleanData, "\"")) != NULL) {
              do {
                  printf("%s\n", TOKENS);
              } while ((TOKENS = strtok(NULL, "\"")) != NULL);
          }

Hoe krijg ik deze TOKENS stuk voor stuk in een array[10]?
Sorry, ben een newbie in C, dus moet nog een boel leren :)

  • pietervl
  • Registratie: Februari 2002
  • Laatst online: 06:34
Een string is in C niets anders dan een character-array. Dus met string[0] zou je gewoon de characters van de string kunnen benaderen...

  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 20-12-2025
sorry.. ben vergeten iets toe te voegen.... de string die ik tokenize is een zin zoals de volgende:

code:
1
log L 03/05/2006 - 19:06:21: Rcon: "rcon 1419416439 "blablabla" kick #242 "afk"" from "123.456.789.012:27005"


Deze regels (van Counter-Strike ;)) wil ik dus opsplitsen op de komma's en die stukken in een array zetten, zodat ik ze apart kan aanroepen. Ik kan ze niet charbased aanspreken, omdat sommige stukken van lengte veranderen (zoals het kick deel)

[ Voor 19% gewijzigd door -W0kk3L- op 12-03-2006 11:09 ]


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 20-03 15:34
-W0kk3L- schreef op zondag 12 maart 2006 @ 11:09:
sorry.. ben vergeten iets toe te voegen.... de string die ik tokenize is een zin zoals de volgende:

code:
1
log L 03/05/2006 - 19:06:21: Rcon: "rcon 1419416439 "blablabla" kick #242 "afk"" from "123.456.789.012:27005"


Deze regels (van Counter-Strike ;)) wil ik dus opsplitsen op de komma's en die stukken in een array zetten, zodat ik ze apart kan aanroepen. Ik kan ze niet charbased aanspreken, omdat sommige stukken van lengte veranderen (zoals het kick deel)
Je bedoelt op de quotes (")?

Tuurlijk kun je dat wel:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>

int main(int argc, char * argv[]) {
  char * str = "blablabla";
  char * str2 = "blablablabla";

  int i;
  for (i = 0; i < strlen(str); i++) {
    printf("%c", str[i]);
  }
  printf("\n\n");

  for (i = 0; i < strlen(str2); i++) {
    printf("%c", str2[i]);
  }
  printf("\n\n");

  return 0;
}

[ Voor 10% gewijzigd door zeroxcool op 12-03-2006 11:37 ]

zeroxcool.net - curity.eu


  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 20-12-2025
Ehmm.. nu snap ik em even neit.... waar split jij nou op de quotes dan? Die rcon regel is dus mijn invoer (cq. CleanData)

[ Voor 27% gewijzigd door -W0kk3L- op 12-03-2006 13:45 ]


Verwijderd

Kun je niet gewoon zoiets doen?

C:
1
2
3
4
5
6
7
8
9
10
char *str[256]; // of wat voor size dan ook
int args = 0;

if ((TOKEN = strtok(cleanData, "\"")) != NULL) {
    do {
        str[args] = TOKEN;
        args++;
    }
    while ((TOKEN = strtok(NULL, "\"")) != NULL);
}


Nu kun je per index van str de token opvragen (verder niet getest).

  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 20-12-2025
Thnx, dat deet et em :) Ik weet het, het is iets simpels, maar je hebt een beginneling weer opweg geholpen... thnx :)
Pagina: 1