Разобрать номер версии, заданный в виде строки, в 4 различных целых числа, используя в c - PullRequest
1 голос
/ 21 апреля 2011

У меня есть номер версии, возвращенный в виде строки, которая выглядит примерно как "6.4.12.9", четыре числа, каждое из которых разделено "."

Что я хотел бы сделать, это проанализировать строку в4 разных целых числа.Давая мне

int1 = 6
int2 = 4
int3 = 12
int4 = 9

Я бы обычно использовал для этого регулярное выражение, но эта опция мне недоступна при использовании C.

Ответы [ 6 ]

7 голосов
/ 21 апреля 2011

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

int a,b,c,d;
const char *version = "1.6.3.1";
if(sscanf(version,"%d.%d.%d.%d",&a,&b,&c,&d) != 4) {
  //error parsing
} else {
  //ok, use the integers a,b,c,d
}
2 голосов
/ 21 апреля 2011

Если вы работаете в системе POSIX и можете ограничиться POSIX, вы можете использовать стандартную библиотеку регулярных выражений POSIX, выполнив:

#include <regex.h>

, а затем прочитайте соответствующую страницу руководства для API. Я бы не рекомендовал regexp-решение для этой проблемы для начала, но я хотел бы указать для ясности, что регулярные выражения часто доступны в C. Обратите внимание, что это не "стандартный C", поэтомуВы не можете использовать его везде, только в системах POSIX (то есть "Unix-like").

1 голос
/ 21 апреля 2011

Одно решение с использованием strtoul.

int main (int argc, char const* argv[])
{
    char ver[] = "6.4.12.9";
    char *next = ver;
    int v[4], i;
    for(i = 0; i < 4; i++, next++)
        v[i] = strtoul(next, &next, 10);
    return 0;
}
1 голос
/ 21 апреля 2011

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

Вы также можете использовать sscanf().

0 голосов
/ 21 апреля 2011

Если ни один из них не превысит 255, inet_pton будет разборчиво для вас.: -)

0 голосов
/ 21 апреля 2011

Вы можете использовать strtoul() для разбора строки и , чтобы получить указатель на первый нечисловой символ.Другим решением будет токенизация строки с использованием strtok() и последующее использование strtoul() или atoi() для получения целого числа.

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