Пара ключ-значение в C? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть строка в формате

"SERVERID=12345\nSERVERKEY=asdasw\nSERVERAPPID=123213\n"

Я проанализировал эту строку построчно, используя strtok(). Есть ли способ сделать пару ключ-значение каждой строки? Как, может быть, хранить их в каком-то массиве? Я имею в виду, что если я хочу SERVERID, я просто говорю Array['SERVERID'], и в качестве значения возвращается 12345. Есть ли способ сделать это в C?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Стандартный C не дает вам никаких «типов контейнеров», таких как тот, который вы ищете. Тем не менее, у вас есть несколько вариантов решения вашей проблемы:

  1. Звучит глупо, но вы можете переключиться на другой язык. По крайней мере, это о чем подумать. Например, C ++ приходит на ум, предлагая тип std::map.

  2. Использовать стороннюю библиотеку. Популярным выбором является GLib , он предлагает хеш-таблицу , которую вы можете использовать.

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

    struct stringpair {
        char *key;
        char *value;
    };
    
    struct stringpair *table;
    
    // ...
    size_t entries = 42; // number of entries you found
    table = malloc(entries * sizeof *table); // check for NULL after this
    
    // look for an entry:
    char *value = 0;
    for (size_t i = 0; i < entries; ++i)
    {
        if (!strcmp(table[i].key, "SERVERID"))
        {
            value = table[i].value;
            break;
        }
    }
    

    Это, конечно, очень базовое решение, которое плохо работает с большим количеством записей. Я также не тестировал этот код, просто чтобы дать вам приблизительное представление. Если вам нужен быстрый поиск, вам нужно вместо этого реализовать хеш-таблицу или использовать опцию 1 или 2.

0 голосов
/ 03 июля 2018

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

Вы можете найти свой ответ здесь: Что такое хеш-таблица и как ее создать в C?

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

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