Разбор строки в C - PullRequest
       2

Разбор строки в C

0 голосов
/ 11 декабря 2011

Мне нужно разобрать мою строку, но все мои разделители - это символы, кроме a-z и A-Z. Как я могу это сделать?

Я думал, что strtok, но я должен написать все символы в качестве разделителя, и это будет слишком долго. Пример строки:

Ax'cda2hsa+AsF(f/a as

Его нужно разбить на: "Axe", cda "" hsa "," AsF "," f "" a "" as "

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

Ответы [ 3 ]

1 голос
/ 11 декабря 2011

Вы можете просто пройти через строку и сделать это самостоятельно, если не хотите выполнять регулярное выражение (3)

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

int main(int ac, char *av[]) {
    char string[] = "   Ax'cda2hsa+AsF(f/a as";
    int i,idx,len;
    len = strlen(string);
    #define MAX_SPLIT 256
    #define MAX_SPLIT_MASK (MAX_SPLIT - 1)
    char buf[MAX_SPLIT];
    for (idx = 0, i=0;i<len;i++) {
        char c = string[i];
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <='Z')) {
            buf[idx++ & MAX_SPLIT_MASK] = c;
        } else {
            buf[idx++ & MAX_SPLIT_MASK] = '\0';
            if (idx > 1)
                printf("%s\n",buf);
            idx = 0;
        }
    }
    if (idx > 1) {
            buf[idx++ & MAX_SPLIT_MASK] = '\0';
            printf("%s\n",buf);
    }
    #undef MAX_SPLIT
    #undef MAX_SPLIT_MASK

    return 0;
}
1 голос
/ 11 декабря 2011

Если вы ищете библиотечную функцию c, strspn(str, dict) будет полезным. Возвращает длину первой подстроки строки, содержащей только символы в dict. Таким образом,

  strspn("hello world", "leh");

Вернется 4.

0 голосов
/ 11 декабря 2011

Используйте strpbrk, чтобы найти начало действительных символов, а затем strspn, чтобы получить длину.Извлечь в новую строку.Повторяйте, пока strpbrk не вернется NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...