Подтвердить что ты не робот

Что означает strpbrk?

Я иногда использовал strpbrk(), когда выполнял низкоуровневую строчную работу на C, но я никогда не мог понять что он означает. Я всегда произносил это внутренне в моей голове как "шевелить р-лайку", но это никогда не чувствовалось правильно.

Он не имеет этимологии, столь же очевидной, как любая из других строковых функций, например. strchr (str ing ch a r) или strspn ( str ing sp а п).

Я смутно вспоминаю, что где-то читал, что все исходные стандартные библиотечные функции были ограничены 7-символьными именами, чтобы оставаться совместимыми с Fortran, или потому, что в исходном стандарте C идентификаторы длиной более 7 символов считались эквивалентными их 7- символьный префикс или что-то еще. Может ли кто-нибудь подтвердить/опровергнуть/разъяснить это?

4b9b3361

Ответ 1

В следующем разговоре предлагается "String Pointer Break": http://www.cpptalk.net/what-strspn-and-strpbrk-stands-for--vt1253.html

Действительно, дело Microsoft в отношении документации - это StrPBrk и, как правило, подтверждает, что разделение слов: http://msdn.microsoft.com/en-us/library/bb760010(VS.85).aspx

И, наконец, это подтверждает: http://www.gnu.org/software/libtool/manual/libc/Search-Functions.html

Функция strpbrk ( "string pointer break" ) связана с strcspn, за исключением того, что возвращает указатель на первый символ в строке, который является членом набора stopset, а не длины исходной подстроки. Он возвращает нулевой указатель, если не обнаружен такой символ от остановки.

Ответ 2

Из документации библиотеки GNU C:

Функция: char * strpbrk (const char* string, const char * stopset)

strpbrk ( "прерывание указателя строки" ) функция связана с strcspn, кроме что он возвращает указатель на первый символ в строке, являющейся членом от установленной остановки, а не длина начальной подстроки. Это возвращает нулевой указатель, если такой символ от остановки.

Например,

strpbrk ( "hello, world", "\ t\n,.;!?" ) = > ", world"

Функция возвращает указатель на первый символ в STOPSET (aka BREAKSET). Я мысленно прочитал его как "для STR ing, верните P на BR ea K".

Ответ 3

Что касается вашего другого вопроса:

Я смутно помню, как читал где-то что все оригинальные стандарты библиотечные функции были ограничены 7-символьные имена либо остаться совместимый с Fortran, или потому, что в исходный стандарт C, идентификаторы более 7 символов были считаются эквивалентными их 7-символьный префикс или что-то еще. Можно кто-нибудь подтверждает/отрицает/разъясняет это?

В оригинальном стандарте ANSI C указано, что реализация была определена, сколько символов внешнего символа было бы значительным, но должно быть не менее 6 символов (и для реализации было разрешено быть нечувствительным к делу для них). Это было сделано, потому что путь назад, когда системы часто имели такой тип ограничений (будь то из библиотек FORTRAN, ограничений линкера или чего-то еще).

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

FWIW, C99 нанесли минимум до 31 символа. В стандарте С++ (1998) говорится, что реализация должна документировать, насколько значительная часть внешнего имени значительна и предполагает, что оно должно быть не менее 1024 символов. Я знаю, что Borland С++ 5.5 имел ограничение примерно на 250 символов, что вызывает проблемы, особенно при использовании шаблонов.

Ответ 4

Я vageuly помню, что strpbrk означает String Pointer Break, я не помню, где я его видел.

Ответ 5

В 1972 году в Bell Labs был также язык программирования Snobol, который был предназначен для манипулирования строкой. У него были функции break() и span(), которые по сути дела сделали одно и то же. Большинство строковых функций моделируются после того, что появилось в Snobol. Проверьте биографические данные и книги, написанные доктором Джеймсом Ф. Гимпелем

Ответ 6

Пока все просто цитируют материал, они не объяснили, почему это "STRING Pointer BReaK". Вы сможете легко запомнить и понять, почему strpbrk, когда вы думаете об этом в темах базового алгоритма, как это:

При сканировании STRING BREAK, если найден какой-либо из символов в POINTER.