Задана строка, например,
char str[] = "Can You ever see the Rain";
Нужно преобразовать ее в массив строк (слов) вида
token[0] = "Can";
token[1] = "You";
token[2] = "ever";
...
В простейшем случае, когда известно максимально возможное число слов (MAXWORDS
), используем для их хранения статический массив
#include <string.h>
#include <stdio.h>
#define MAXWORDS 10
int main(void)
{
char str[] = "Can You ever see the Rain";
int i = 0;
char *token[MAXWORDS];
token[i] = strtok(str," ");
while (token[i])
token[++i] = strtok(NULL," ");
token[i] = 0; /* чтобы не выводить все MAXWORDS */
for (i = 0; token[i]; i++)
printf("token[%i] = %s\n", i, token[i]);
return 0;
}
Если возможное количество слов неизвестно, используем динамический массив, размер которого изменяется по мере необходимости с помощью realloc
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char str[] = "Can You ever see the Rain";
char **token = NULL;
char *p = strtok(str, " ");
int numOfDelimeters = 0, i;
while (p)
{
token = realloc(token, sizeof(char *) * ++numOfDelimeters);
if (token == NULL)
exit(-1);
token[numOfDelimeters-1] = p;
p = strtok(NULL, " ");
}
for (i = 0; i < numOfDelimeters; i++)
printf("token[%i] = %s\n", i, token[i]);
free(token);
return 0;
}
Кроме того, в связи с двукратным использованием strtoc
(:source lang=C
token[i] = strtok(str," ");
while (token[i])
token[++i] = strtok(NULL," ");
есть интересная идиома:
```C
while ( (token[i] = strtok(!i ? str : NULL, " ")) )
i++;
Комментарии
comments powered by Disqus