2016-08-05 6 views
2

Я ищу функцию, которая проверяет, является ли строка следующим образом (спички точно) структура данных, указанных дополнительными аргументами, соответствующих format строки Как это:Существует ли какая-то реализация 'strcmpf'?

/* int strcmpf (char *str1, char *format, ...); */ 
char *test = "Hello World !" 

if(!strcmpf(test, "%s%*s %c", "Hello ", '!') 
    return HELLO_HAS_BEEN_SAID; 
else 
    return PROGRAM_ISNT_POLITE; 

Реализация этого самого я полагаю, будет очень сложно, но такая функция может быть очень полезна для семантического анализа содержимого. Прежде чем я попытаюсь написать такую ​​функцию самостоятельно, мне нужно знать, есть ли уже библиотека или фрагмент кода, который обеспечивает реализацию такой функции?

Чтобы быть более конкретным, мне нужно поведение, соответствующее шаблону. Таким образом, test должен точно соответствовать шаблону, заданному данными, соответствующими параметру format.

+5

Реализация такой функции очень проста, просто используйте ['vsnprintf'] (http://en.cppreference.com/w/c/io/vfprintf) для форматирования, а затем вызовите' strcmp'. –

+1

@JoachimPileborg Совершенно верно, но если мне нужно поместить его в функцию по вызову 'strcmp()' мне все равно нужно предоставить переменные аргументы для функции. Что не «очень просто» для всех, вы не согласны? Кажется, что это практически не подходит для меня ... – Malina

+0

@JoachimPileborg: Что теперь? Откуда «мир» появился в вашем предлагаемом решении? –

ответ

3

мне нужно знать, если уже есть библиотека или фрагмент кода, который обеспечивает реализацию функции как этот

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

Как я уже говорил в комментариях, я предлагаю вам разработать модель сопоставление аспекта вокруг добросовестного регулярных выражений вместо вокруг printf() или scanf() форматов (которые не совсем то же самое). Для поддержки этой части доступно несколько библиотек регулярных выражений.

+0

Проблема в объяснении прибыла из того, что я полагался на людей, понимающих, почему это 'strcmpf' не' sscanfcmp' Я думаю. – Malina

+0

Настоящая причина, по которой мне нужна такая функция, - это правильно интерпретировать вывод отладки gcc's stderr. То есть .. знать, где сообщение является экземпляром, ошибкой, предупреждением, ссылкой на линию, пути к файлу и так далее. Таким образом, я могу выделить конкретную информацию. – Malina

+0

@Malina, для этого вам, вероятно, даже не нужно регулярное выражение.Диагностика GCC состоит из четырех полей двоеточия (:) -delimited, и вы можете полагаться на первые три, чтобы они не содержали двоеточие. Вы можете просто разделить диагностический текст на (первые три) двоеточия и обработать каждую часть соответствующим образом. Вы можете разбить строку на 'strtok()', с помощью 'sscanf()' или другими способами. –

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

  • Нет связанных вопросов^_^