Найти форматированную строку

Меня интересует что-то вроде функции strstr(), но я могу передать отформатированную строку в качестве аргумента, например, то, что я передаю printf(). Чтобы было понятно, давайте возьмем пример:

Предположим, я хочу найти этот текст: "abc:123", где abc может быть любой строкой любого размера, за которой следует ':', а затем некоторое целое число. Я полагаю, что хорошая функция могла бы получить в качестве аргумента что-то вроде этого: "%s:%d".

Что-то еще, я хочу использовать это встроенное, поэтому я не могу получить большие и/или эзотерические библиотеки.

Спасибо и всего наилучшего!


person Leandro Lima    schedule 05.07.2013    source источник
comment
Я редко/едва ли рекомендую их, потому что ими злоупотребляют, но вы ищете регулярные выражения ?   -  person    schedule 05.07.2013
comment
Что-то вроде этого, но дешевле...   -  person Leandro Lima    schedule 05.07.2013
comment
Также есть sscanf(), как sedavidw упомянул в своем ответе, но это еще хуже, чем регулярные выражения.   -  person    schedule 05.07.2013
comment
В том смысле, что, возможно, им еще больше злоупотребляют, его еще больше неправильно понимают и сбивают с толку (таким образом, его легче понять полностью и совершенно неверно), чем регулярные выражения. Лично я стараюсь избегать их обоих, если это возможно.   -  person    schedule 05.07.2013


Ответы (4)


Вы можете использовать sscanf. Он принимает строку и формат в качестве входных данных, и в результате вы заполняете переменные. Регулярные выражения также следует учитывать

person sedavidw    schedule 05.07.2013
comment
Возможно, единственный допустимый вариант использования sscanf(). +1. - person ; 05.07.2013
comment
Было бы слишком опасно использовать, не так ли? - person Leandro Lima; 05.07.2013
comment
@Leandro - вы можете проверить входные данные на вменяемость. - person Chris Stratton; 05.07.2013

Использование должно использовать регулярные выражения.

Этот поток может помочь вам: Компиляция/сопоставление регулярных выражений POSIX в C

person Vinicius Souza    schedule 05.07.2013
comment
Регулярные выражения хороши, но я боюсь, что это перегрузит мое приложение. - person Leandro Lima; 05.07.2013
comment
Если ваша проблема носит узкий, а не общий характер, ее нетрудно реализовать с помощью небольшого конечного автомата, который сканирует посимвольно. - person Chris Stratton; 05.07.2013

Джентльмен,

Я нашел этот CRX, и это именно то, что я хотел. Спасибо всем!

person Leandro Lima    schedule 08.07.2013

Кроме того, вы можете напрямую использовать функцию printf. Функция выводит строки на uart по умолчанию (у меня uart0).

Но перед использованием printf требуется правильная установка и настройка.

person madD7    schedule 08.07.2013