Есть ли способ разбить строку на несколько символов в C? - PullRequest
11 голосов
/ 16 августа 2011

Есть ли способ в C разделить строку (используя strtok или любым другим способом), где разделитель имеет длину более одного символа? Я ищу что-то вроде этого:

char a[14] = "Hello,World!";
char *b[2];
b[0] = strtok(a, ", ");
b[1] = strtok(NULL, ", ");

Я хочу, чтобы строка не разбивалась, потому что между запятой и буквой W нет пробела. Есть ли способ сделать это?

Ответы [ 3 ]

8 голосов
/ 16 августа 2011

Вы можете просто несколько раз вызвать substr, чтобы найти вхождения вашей граничной строки и разделить результаты. После того, как вы нашли результат, передвиньте указатель на длину подстроки и повторите поиск.

4 голосов
/ 16 августа 2011

Вы можете использовать char * strstr(const char *haystack, const char *needle), чтобы найти строку-разделитель в вашей строке.

char a[14] = "Hello,World!";
char b[2] = ", ";
char *start = a;
char *delim;
do {
    delim = strstr(start, b);
    // string between start and delim (or end of string if delim is NULL).
    start = delim + 2; // Use lengthof your b string.
} while (delim);
1 голос
/ 16 августа 2011

Нечто подобное может быть? Нет гарантий, что это скомпилируется. ;)

char* strstrtok(char *haystack, char *needle) {
    static char *remaining = null;
    char *working;

    if(haystack)
         working = haystack;
    else if(remaining)
         working = remaining;
    else
         return NULL;

    char *result = working;
    if(result = strstr(working, needle))
        remaining = working + strlen(needle) + 1;

    return result;
}
...