2013-08-26 4 views
2

Я создаю программу, которая может совершать транзакции mysql через C и html.Извлечение целых чисел из строки запроса

У меня есть эта строка запроса query = -id=103&-id=101&-id=102&-act=Delete

Распаковка «Удалить» на sscanf не так уж трудно, но мне нужна помощь извлечения чисел и помещая их в массив Int id[]. Количество записей -id может варьироваться в зависимости от того, сколько флажков было проверено в форме html.

Я искал часы, но не нашел подходящего решения; или я просто не понял их. Есть идеи?

Благодаря

ответ

1

Вы можете использовать strstr и atoi для извлечения чисел в цикле, как это:

char *query = "-id=103&-id=101&-id=102&-act=Delete"; 
char *ptr = strstr(query, "-id="); 
if (ptr) { 
    ptr += 4; 
    int n = atoi(ptr); 
    printf("%d\n", n); 
    for (;;) { 
     ptr = strstr(ptr, "&-id="); 
     if (!ptr) break; 
     ptr += 5; 
     int n = atoi(ptr); 
     printf("%d\n", n); 
    }    
} 

Demo on ideone.

+0

Это специфично только для захвата« id », ... и вы можете немного упростить (глядя на «-id» вместо «& -id») ... но мне это нравится :) – paulsm4

0

Вы хотите использовать strtok или лучшее решение, чтобы разметить эту строку с & и = как лексемы.

Посмотрите на cplusplus.com для получения дополнительной информации и примера.

Это выход вы получите от strtok

Output: 

Splitting string "- This, a sample string." into tokens: 
This 
a 
sample 
string 

После того, как вы выяснить, как разделить их, следующее препятствие для преобразования числа из строк в int с. Для этого нужно посмотреть на atoi или его более безопасном более надежного кузене strtol

+0

Возможно, вы должны упомянуть 'strtol', поскольку это тоже часть его вопроса. – Duck

+0

Если я использую 'strtok', тогда возможно ли распределить целые числа в массив int? – Exphyre

+0

@Exphyre 'strtok' используется для разбиения строки на фигуры, тогда вам нужно найти целые числа среди этих фрагментов, а затем преобразовать их и сохранить их в массив –

0

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

Смежные вопросы