У меня есть номер версии, возвращенный в виде строки, которая выглядит примерно как "6.4.12.9", четыре числа, каждое из которых разделено "."
Что я хотел бы сделать, это проанализировать строку в4 разных целых числа.Давая мне
int1 = 6 int2 = 4 int3 = 12 int4 = 9
Я бы обычно использовал для этого регулярное выражение, но эта опция мне недоступна при использовании C.
Вы можете использовать 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 }
Если вы работаете в системе POSIX и можете ограничиться POSIX, вы можете использовать стандартную библиотеку регулярных выражений POSIX, выполнив:
#include <regex.h>
, а затем прочитайте соответствующую страницу руководства для API. Я бы не рекомендовал regexp-решение для этой проблемы для начала, но я хотел бы указать для ясности, что регулярные выражения часто доступны в C. Обратите внимание, что это не "стандартный C", поэтомуВы не можете использовать его везде, только в системах POSIX (то есть "Unix-like").
Одно решение с использованием strtoul.
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; }
Вы можете использовать strtok() для этого (за которым следует strtol()), просто убедитесь, что вы знаете семантику strtok(), они немного необычный.
strtok()
strtol()
Вы также можете использовать sscanf().
sscanf()
Если ни один из них не превысит 255, inet_pton будет разборчиво для вас.: -)
inet_pton
Вы можете использовать strtoul() для разбора строки и , чтобы получить указатель на первый нечисловой символ.Другим решением будет токенизация строки с использованием strtok() и последующее использование strtoul() или atoi() для получения целого числа.
strtoul()
atoi()