C - разделить строку - PullRequest
       2

C - разделить строку

1 голос
/ 25 октября 2011

Существует ли какая-либо предопределенная функция в C, которая может разбить строку по заданному разделителю? Скажем, у меня есть строка:

"Command:Context"

Теперь я хочу сохранить «Command» и «Context» в двумерном массиве символов

char ch[2][10]; 

или двум различным переменным

char ch1[10], ch2[10];

Я попытался использовать цикл, и он работает нормально. Мне просто любопытно, есть ли такая функция, которая уже существует, я не хочу изобретать велосипед. Пожалуйста, приведите четкий пример, большое спасибо!

Ответы [ 2 ]

6 голосов
/ 25 октября 2011

Вы можете использовать strtok

Online Demo :

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

int main ()
{
    char str[] ="Command:Context";
    char * pch;
    printf ("Splitting string \"%s\" into tokens:\n",str);
    pch = strtok (str,":");
    while (pch != NULL)
    {
        printf ("%s\n",pch);
        pch = strtok (NULL, ":");
    }
    return 0;
}

Вывод:

Splitting string "Command:Context" into tokens:
Command
Context
2 голосов
/ 25 октября 2011

Вы можете токенизировать строку с strtok согласно следующему примеру:

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

int main (void) {
    char instr[] = "Command:Context";
    char words[2][10];
    char *chptr;
    int idx = 0;

    chptr = strtok (instr, ":");
    while (chptr != NULL) {
        strcpy (words[idx++], chptr);
        chptr = strtok (NULL, ":");
    }

    printf ("Word1 = [%s]\n", words[0]);
    printf ("Word2 = [%s]\n", words[1]);

    return 0;
}

Вывод:

Word1 = [Command]
Word2 = [Context]

Функция strtok имеет некоторые незначительные ошибки, которые вы, вероятно,хочу остерегаться.Прежде всего, он модифицирует саму строку, чтобы вплетать ее магию, поэтому не будет работать с строковыми литералами (например).

...