strcasecmp()
Синтаксис:
strcasecmp (str1, str2 )
Поддерживается следующими версиями PHP:
Описание функции:
Функция strcasecmp () осуществляет безопасное в двоичной форме сравнение двух строк. Сравнение происходит без учета регистра.
Возвращает три возможных значения:
число меньше 0 — если str1 меньше чем str2;
число больше 0 — если str1 больше чем str2.
0 — если str1 равно str2.
Обязательный аргумент. Первая сравниваемая строка.
Обязательный аргумент. Вторая сравниваемая строка.
strcasecmp — Бинарно-безопасное сравнение строк без учета регистра
(PHP 4, PHP 5, PHP 7)
strcasecmp — Бинарно-безопасное сравнение строк без учета регистра
Описание
Бинарно-безопасное сравнение строк без учета регистра.
Список параметров
Возвращаемые значения
Возвращает отрицательное число, если str1 меньше, чем str2 , положительное число, если str1 больше, чем str2 , и 0 если строки равны.
Примеры
Пример #1 Пример использования strcasecmp()
Смотрите также
- strcmp() — Бинарно-безопасное сравнение строк
- preg_match() — Выполняет проверку на соответствие регулярному выражению
- substr_compare() — Бинарно-безопасное сравнение 2 строк со смещением, с учетом или без учета регистра
- strncasecmp() — Бинарно-безопасное сравнение первых n символов строк без учета регистра
- stristr() — Регистронезависимый вариант функции strstr
- substr() — Возвращает подстроку
strncasecmp и strcasecmp не были объявлены
Я пытаюсь скомпилировать Assimp с MinGW в Code :: Blocks, но я получаю следующие ошибки.
При поиске я обнаружил, что две рассматриваемые функции (strcasecmp и strncasecmp) фактически объявлены в string.h который включен в заголовок StringComparison.h , Мне также удалось получить strings.h файл, которому они изначально принадлежат, но в том числе и тот, который не решил проблему.
При поиске на этом сайте я обнаружил, что я не единственный, кто борется с этой проблемой. Другое решение, которое я нашел, предложило использовать операторы define, потому что у функций могло бы быть немного другое имя, но это тоже не помогло.
Решение
Я только что столкнулся с точно такой же проблемой, и этот вопрос возник во время поиска решения для Google, поэтому я документирую свое хитрое решение здесь:
В конце концов, я сделал это, просто сделав несколько небольших правок в исходном коде Assimp. Решение проблемы со строкой недостаточно для того, чтобы заставить ее работать, потому что она не работает позже в сборке. Я перечислю изменения, которые я сделал ниже. Я рекомендую делать их по одному, а затем перестраивать, на тот случай, если по какой-то причине с вашей настройкой некоторые из них не требуются. Обратите внимание, что вы не можете выполнить экспорт модели с этим решением из-за последнего редактирования (в Exporter.cpp), если вам действительно нужно найти другой способ исправить ошибки ссылки.
Это не чистое решение, и, вероятно, оно будет заменено будущей версией Assimp, после чего я просто удалю ее. Это для assimp-3.3.1, построенного с MinGW:
В StringComparison.h отредактируйте ASSIMP_stricmp функция, комментируя все, кроме else пункт #ifdef:
Сделать аналогичную вещь в ASSIMP_strincmp ,
Далее выдает ошибку об ::_fullpath в DefaultIOSystem.cpp , Мое «исправление» для этого состояло в том, чтобы просто закомментировать все остальные опции отступления в этой функции:
Он также жалуется на то, что snprintf не определен. редактировать StringUtils.h изменить следующий #define для добавления подчеркивания перед snprintf:
Также есть ошибка, что :: atof не определен. Вы можете исправить это, добавив
Это должно создать его, но в ссылке будет ошибка Exporter.cpp (это может быть связано с моими конкретными настройками CMake, потому что я отключил почти все форматы моделей). Я исправил это, закомментировав определение gExporters и заменив его следующим:
После этого он работал и работал нормально. Файлы библиотеки помещаются в code папка. Поместите libassimp.dll.a в путь сборки lib, а libassimp.dll — в путь к исполняемому файлу.
Конечно, вы также можете получить его, используя вместо этого VisualStudio (я этого не сделал, потому что я не смог потрудиться с его установкой) или построив Linux (я делал это ранее, и сначала он хорошо работал, но мне нужно было сделать это). порт Windows).
Другие решения
У меня тоже были некоторые проблемы, но, надеюсь, я смог их решить. Я знаю, что, вероятно, уже слишком поздно, чтобы помочь, в частности, но я надеюсь, что кто-то в Интернете найдет это полезным. Я компилирую, используя Code :: Blocks 16.01, используя gcc 5.3.0.
:: strncasecmp не объявлен в этой области:
Вы должны включить и удалить «::»
:: _ полный путь не объявлен в этой области:
Мне никогда не приходилось выполнять операцию по нахождению полного пути, поэтому я уверен в этом меньше всего. Но в любом случае, поскольку я не мог просто удалить все, мне пришлось искать альтернативу. То есть используя «GetFullPathName».
Так, как предложено MSDN, я включил,.
Я также заменяю строку:
ret = _fullpath( _out, in, PATHLIMIT );
от
ret = (char*)GetFullPathName(in, PATHLIMIT, _out, NULL);
Должно работать нормально, полный путь получен и проверка ошибок также сохранена.
vsnprintf не объявлен в этой области
Просто добавьте подчеркивание _ перед именем функции.
to_string не является членом std ::
Я хотел бы сказать, что это обычная ошибка при использовании MinGW, но на самом деле, Assimp содержит встроенную альтернативу std::to_string , Вы просто должны удалить std:: часть и она должна катиться.
Обязательно включите в файлы, в которые просто удалили std:: не работает
test\CMakeFiles\gtest.dir\build.make|109|recipe for target ‘test/gtest/src/gtest-stamp/gtest-build’ failed| ?
Неважно, у вас уже есть работающий .dll в папке «code»;)
strcasecmp
(PHP 4, PHP 5, PHP 7)
strcasecmp — Binary safe case-insensitive string comparison
Description
Binary safe case-insensitive string comparison.
Parameters
The first string
The second string
Return Values
Returns str1 is less than str2 ; > 0 if str1 is greater than str2 , and 0 if they are equal.
Examples
Example #1 strcasecmp() example
See Also
- strcmp() — Binary safe string comparison
- preg_match() — Perform a regular expression match
- substr_compare() — Binary safe comparison of two strings from an offset, up to length characters
- strncasecmp() — Binary safe case-insensitive string comparison of the first n characters
- stristr() — Case-insensitive strstr
- substr() — Return part of a string
User Contributed Notes
A simple multibyte-safe case-insensitive string comparison:
function mb_strcasecmp ( $str1 , $str2 , $encoding = null ) <
if ( null === $encoding ) < $encoding = mb_internal_encoding (); >
return strcmp ( mb_strtoupper ( $str1 , $encoding ), mb_strtoupper ( $str2 , $encoding ));
>
?>
Caveat: watch out for edge cases like «ß».
The sample above is only true on some platforms that only use a simple ‘C’ locale, where individual bytes are considered as complete characters that are converted to lowercase before being differentiated.
Other locales (see LC_COLLATE and LC_ALL) use the difference of collation order of characters, where characters may be groups of bytes taken from the input strings, or simply return -1, 0, or 1 as the collation order is not simply defined by comparing individual characters but by more complex rules.
Don’t base your code on a specific non null value returned by strcmp() or strcasecmp(): it is not portable. Just consider the sign of the result and be sure to use the correct locale!
strcasecmp() : A Non-Standard Function?
The other day I created a post over at CodeReview. One person who answered my question suggested that I refrain from using strcasecmp() because the «function is non-standard [and] this makes [my] code non-portable.» This is how I used it:
Can someone explain more in-depth and why strcasecmp() has these limitations?
4 Answers 4
strcasecmp is not in the C or C++ standard. It’s defined by POSIX.1-2001 and 4.4BSD.
If your system POSIX or BSD compliant, you’ll have no problems. Otherwise, the function will be unavailable.
«The function is non-standard» means, that the function declaration and contract aren’t specified in The C International Standard.
«This makes code non-portable» means, that implementations aren’t required to implement strcasecmp() , and therefore your code is not fully standard-compliant and not guaranteed to be compiled by strictly standard-conforming compilers.
strcasecmp() is itself a part of the POSIX.1-2001 and 4.4BSD specifications (link).
Short answer: As strcasecmp() is not in the C standard, that make it non-standard.
strcasecmp() is defined in a the popular standards such as 4.4BSD, POSIX.1-2001.
The definition of case-less functions opens the door to the nit-picky details. These often involve the + or — result of case-less compares, not just the 0 or non-0 as used by OP. In particular:
In the POSIX locale, strcasecmp() and strncasecmp() shall behave as if the strings had been converted to lowercase and then a byte comparison performed. The results are unspecified in other locales.
The trouble with this is with upper and lower case letters that do not have a 1 to 1 mapping. Consider a local that has E , e and é but no É , yet toupper(‘é’) — > ‘E’ . Then with «as if the strings had been converted to lowercase», ‘E’ has 2 choices.
As a candidate portable solution consider that round trips the letter (to upper then to lower) to cope with non 1-to-1 mappings:
If you do not want to round-trip the values use:
Detail: toupper() and tolower() only defined for int in the range of unsigned char and EOF .
C Language Comparsion: strcmp (), strncmp (), strcasecmp (), strncasecmp ()
пример
strcase* -функции не являются стандартными C, а расширением POSIX.
Функция strcmp лексикографически сравнивает два массива символов с нулевым символом. Функции возвращают отрицательное значение, если первый аргумент появляется перед вторым в лексикографическом порядке, ноль, если они сравнивают равный или положительный, если первый аргумент появляется после второго в лексикографическом порядке.
В strcmp strcasecmp функция strcasecmp также сравнивает лексикографически ее аргументы после перевода каждого символа в его нижний регистр:
strncmp и strncasecmp сравнивают не более n символов:
strcasecmp()
Синтаксис:
strcasecmp (str1, str2 )
Поддерживается следующими версиями PHP:
Описание функции:
Функция strcasecmp () осуществляет безопасное в двоичной форме сравнение двух строк. Сравнение происходит без учета регистра.
Возвращает три возможных значения:
число меньше 0 — если str1 меньше чем str2;
число больше 0 — если str1 больше чем str2.
0 — если str1 равно str2.
Обязательный аргумент. Первая сравниваемая строка.
Обязательный аргумент. Вторая сравниваемая строка.
strcasecmp
strcasecmp — Сравнение строк без учета регистра, безопасное для данных в двоичной форме
Описание
Возвращает отрицательное число, если str1 меньше, чем str2; положительное число, если str1 больше, чем str2, и 0 если строки равны.
Пример #1 Пример использования strcasecmp()
НОВОСТИ ФОРУМА Рыцари теории эфира |
01.10.2020 — 05:20: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education -> [center][Youtube]69vJGqDENq4[/Youtube][/center] [center]14:36[/center] Osievskii Global News 29 сент. Отправлено 05:20, 01.10.2020 г.’ target=_top>Просвещение от Вячеслава Осиевского — Карим_Хайдаров. 30.09.2020 — 12:51: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education -> [center][Ok]376309070[/Ok][/center] [center]11:03[/center] Отправлено 12:51, 30.09.2020 г.’ target=_top>Просвещение от Дэйвида Дюка — Карим_Хайдаров. 30.09.2020 — 11:53: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education -> [center][Youtube]VVQv1EzDTtY[/Youtube][/center] [center]10:43[/center] |
интервью Раввина Борода https://cursorinfo.co.il/all-news/rav.
мой телеграмм https://t.me/peshekhonovandrei
мой твиттер https://twitter.com/Andrey54708595
мой инстаграм https://www.instagram.com/andreipeshekhonow/
[b]Мой комментарий:
Андрей спрашивает: Краснодарская синагога — это что, военный объект?
— Да, военный, потому что имеет разрешение от Росатома на манипуляции с радиоактивными веществами, а также иными веществами, опасными в отношении массового поражения. Именно это было выявлено группой краснодарцев во главе с Мариной Мелиховой.
[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]
Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html
Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html
[center][b]Сон разума народа России [/center]
[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]
Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html
Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html
[center][b]Сон разума народа России [/center]
strncasecmp и strcasecmp не были объявлены
Я пытаюсь скомпилировать Assimp с MinGW в Code :: Blocks, но я получаю следующие ошибки.
При поиске я обнаружил, что две рассматриваемые функции (strcasecmp и strncasecmp) фактически объявлены в string.h который включен в заголовок StringComparison.h , Мне также удалось получить strings.h файл, которому они изначально принадлежат, но в том числе и тот, который не решил проблему.
При поиске на этом сайте я обнаружил, что я не единственный, кто борется с этой проблемой. Другое решение, которое я нашел, предложило использовать операторы define, потому что у функций могло бы быть немного другое имя, но это тоже не помогло.
Решение
Я только что столкнулся с точно такой же проблемой, и этот вопрос возник во время поиска решения для Google, поэтому я документирую свое хитрое решение здесь:
В конце концов, я сделал это, просто сделав несколько небольших правок в исходном коде Assimp. Решение проблемы со строкой недостаточно для того, чтобы заставить ее работать, потому что она не работает позже в сборке. Я перечислю изменения, которые я сделал ниже. Я рекомендую делать их по одному, а затем перестраивать, на тот случай, если по какой-то причине с вашей настройкой некоторые из них не требуются. Обратите внимание, что вы не можете выполнить экспорт модели с этим решением из-за последнего редактирования (в Exporter.cpp), если вам действительно нужно найти другой способ исправить ошибки ссылки.
Это не чистое решение, и, вероятно, оно будет заменено будущей версией Assimp, после чего я просто удалю ее. Это для assimp-3.3.1, построенного с MinGW:
В StringComparison.h отредактируйте ASSIMP_stricmp функция, комментируя все, кроме else пункт #ifdef:
Сделать аналогичную вещь в ASSIMP_strincmp ,
Далее выдает ошибку об ::_fullpath в DefaultIOSystem.cpp , Мое «исправление» для этого состояло в том, чтобы просто закомментировать все остальные опции отступления в этой функции:
Он также жалуется на то, что snprintf не определен. редактировать StringUtils.h изменить следующий #define для добавления подчеркивания перед snprintf:
Также есть ошибка, что :: atof не определен. Вы можете исправить это, добавив
Это должно создать его, но в ссылке будет ошибка Exporter.cpp (это может быть связано с моими конкретными настройками CMake, потому что я отключил почти все форматы моделей). Я исправил это, закомментировав определение gExporters и заменив его следующим:
После этого он работал и работал нормально. Файлы библиотеки помещаются в code папка. Поместите libassimp.dll.a в путь сборки lib, а libassimp.dll — в путь к исполняемому файлу.
Конечно, вы также можете получить его, используя вместо этого VisualStudio (я этого не сделал, потому что я не смог потрудиться с его установкой) или построив Linux (я делал это ранее, и сначала он хорошо работал, но мне нужно было сделать это). порт Windows).
Другие решения
У меня тоже были некоторые проблемы, но, надеюсь, я смог их решить. Я знаю, что, вероятно, уже слишком поздно, чтобы помочь, в частности, но я надеюсь, что кто-то в Интернете найдет это полезным. Я компилирую, используя Code :: Blocks 16.01, используя gcc 5.3.0.
:: strncasecmp не объявлен в этой области:
Вы должны включить и удалить «::»
:: _ полный путь не объявлен в этой области:
Мне никогда не приходилось выполнять операцию по нахождению полного пути, поэтому я уверен в этом меньше всего. Но в любом случае, поскольку я не мог просто удалить все, мне пришлось искать альтернативу. То есть используя «GetFullPathName».
Так, как предложено MSDN, я включил,.
Я также заменяю строку:
ret = _fullpath( _out, in, PATHLIMIT );
от
ret = (char*)GetFullPathName(in, PATHLIMIT, _out, NULL);
Должно работать нормально, полный путь получен и проверка ошибок также сохранена.
vsnprintf не объявлен в этой области
Просто добавьте подчеркивание _ перед именем функции.
to_string не является членом std ::
Я хотел бы сказать, что это обычная ошибка при использовании MinGW, но на самом деле, Assimp содержит встроенную альтернативу std::to_string , Вы просто должны удалить std:: часть и она должна катиться.
Обязательно включите в файлы, в которые просто удалили std:: не работает
test\CMakeFiles\gtest.dir\build.make|109|recipe for target ‘test/gtest/src/gtest-stamp/gtest-build’ failed| ?
Неважно, у вас уже есть работающий .dll в папке «code»;)
strncasecmp и strcasecmp не был объявлен
Я пытаюсь скомпилировать Assimp с MinGW в Code :: Blocks, но я получаю следующие ошибки.
Во время поиска я обнаружил, что эти две функции в вопросе (strcasecmp и strncasecmp) являются фактически объявлены в string.h который включен в заголовок StringComparison.h . Я также сумел получить strings.h , файл , который они изначально принадлежат, но в том числе , что не решен вопрос либо.
При поиске этого сайта я узнал, что я не только один борется с этой проблемой. Другое решение, которое я нашел предложило использовать определение заявления, поскольку функции могут иметь несколько иное название, но это не помогло ни.
Я просто столкнулся с этим точно такой же проблемой, и этот вопрос возник во время поиска Google для решения, поэтому я буду документировать свое хитроумное решение здесь:
В конце концов я получил это происходит, просто сделать несколько небольших изменений в исходный код Assimp. Решение проблемы строки не достаточно, чтобы заставить его работать, потому что он просто не может в конце сборки. Я перечислю изменения, которые я сделал ниже. Я рекомендую делать их по одному за раз, а затем восстановление, только в случае, если по какой-либо причине с вашей установки некоторые из них не требуется. Обратите внимание, что вы не можете сделать модель экспортирующего с этим решением из-за последнее редактирование (до Exporter.cpp), если вам действительно нужно, что вы должны выяснить, другой способ, чтобы исправить ошибки связи.
Это не чистое решение, и это, вероятно, будет вытеснено будущей версией Assimp, в какой момент я просто удалить его. Это для assimp-3.3.1, построенный с MinGW:
В StringComparison.h отредактируйте ASSIMP_stricmp функцию, комментируя все , за исключением else пункта о #ifdef:
Сделайте подобную вещь в ASSIMP_strincmp .
Затем он бросает ошибку о ::_fullpath в DefaultIOSystem.cpp . Мой «фикс» для этого просто использовать закомментируйте все другие Резервный вариант в этой функции:
Он также жалуется на snprintf быть неопределенным. Изменить , StringUtils.h чтобы изменить следующую #define , чтобы добавить подчеркивание перед тем snprintf:
Там же ошибка о :: atof не определено. Вы можете это исправить, добавив
Это должно заставить его строить , но будет ошибка линковки в Exporter.cpp (это может быть связанно с моей конкретной setttings CMake , потому что я отключил почти все форматы модель). Я зафиксировал его комментирование определения gExporters и заменить его следующим образом :
После этого он построил и побежал отлично. Библиотечные файлы помещаются в code папку. Поместите libassimp.dll.a в свою библиотеку пути сборки и libassimp.dll в пути исполняемого файла.
Конечно, вы можете также получить это происходит с помощью VisualStudio вместо этого (я не сделал, потому что я не мог быть обеспокоен его установкой) или путем создания на Linux (я делал это раньше, и он построил прекрасный первый идти, но мне нужно сделать порт Windows).