Что означает strpbrk? - PullRequest
       6

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

27 голосов
/ 01 февраля 2009

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

У него нет такой очевидной этимологии, как у любой другой строковой функции, например strchr ( str ing ch a r acter) или strspn ( str ing sp a п ).

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

Ответы [ 6 ]

28 голосов
/ 01 февраля 2009

Следующий разговор предлагает «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 («разрыв указателя строки») связана с strcspn, за исключением того, что она возвращает указатель на первый символ в строке, который является членом набора stopset вместо длины исходной подстроки. Возвращает нулевой указатель, если такой символ из стоп-набора не найден.

15 голосов
/ 01 февраля 2009

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

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

Strpbrk ("разрыв указателя строки") функция относится к strcspn, кроме что он возвращает указатель на первый символ в строке, который является членом установленного стоп-набора вместо длина исходной подстроки. Это возвращает нулевой указатель, если такого нет персонаж из стоп-набора найден.

Например,

strpbrk ("Привет, мир", "\ t \ n,.;!?") => "Мир"

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

7 голосов
/ 01 февраля 2009

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

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

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

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

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

4 голосов
/ 01 февраля 2009

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

2 голосов
/ 31 мая 2012

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

0 голосов
/ 11 ноября 2017

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...