strpbrk代表什么?

时间:2009-02-01 15:27:06

标签: c

我在C中做低级字符串工作时偶尔会使用strpbrk(),但我从来没有弄清楚它代表什么。我总是在脑海里把它称为“搅拌树皮”,但这种感觉从来都不是正确的。

它没有任何其他字符串函数那么明显的词源,例如: strchr str ing ch a r acter)或strspn str ing的一个的名词)。

我模糊地回忆一下,所有原始标准库函数都限制为7个字符的名称要么与Fortran保持兼容,要么因为在原始C标准中,超过7个字符的标识符被认为等同于它们的7-字符前缀或其他东西。任何人都可以确认/否认/澄清这个吗?

6 个答案:

答案 0 :(得分:28)

以下对话建议“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相关,除了它返回指向字符串中第一个字符的指针,该字符串是set stopset的成员而不是初始子字符串的长度。如果未找到stopset中的此类字符,则返回空指针。

答案 1 :(得分:15)

From The GNU C Library documentation

  

功能:char * strpbrk(const char   * string,const char * stopset)

     

strpbrk(“字符串指针断开”)   函数与strcspn有关,除了   它返回指向第一个的指针   作为成员的字符串中的字符   设置停止而不是   初始子串的长度。它   如果没有,则返回空指针   找到了停止的字符。

     

例如,

     

strpbrk(“你好,世界”,“\ t \ n,。;!?”)   => “,世界”

该函数返回指向STOPSET(又名BREAKSET)中第一个字符的指针。我在心理上将其读作“为 STR ,将 P ointer返回 BR ea K ”。

答案 2 :(得分:7)

至于你的另一个问题:

  我隐约记得在某处读书   所有的原始标准   图书馆的功能仅限于   保留7个字符的名称   与Fortran兼容,或者因为在   原始的C标准,标识符   超过7个字符   被认为等同于他们的   7个字符的前缀或其他东西。能够   有人确认/否认/澄清这个吗?

最初的ANSI C标准表示,实现定义了外部符号的多少个字符是重要的,但它必须至少为6个字符(并且允许实现对它们的情况不敏感)。之所以这样做,是因为系统经常出现这种类型的限制(无论是来自FORTRAN库,链接器限制还是其他)。

因此,虽然您将看到外部名称长于标准库中的外部名称,但这两个名称中没有两个以相同的6个字符序列开头。

FWIW,C99最低可达31个字符。 C ++标准(1998)说,实现必须记录外部名称的重要性,并建议它至少为1024个字符。我知道Borland C ++ 5.5有250个字符的限制,这会导致使用模板时出现问题。

答案 3 :(得分:4)

我真的记得strpbrk代表 String Pointer Break ,我不记得我在哪里看到它。

答案 4 :(得分:2)

1972年,在贝尔实验室,还有一种名为Snobol的编程语言,用于字符串操作。它有函数break()和span(),它们的功能基本相同。大多数字符串函数都是在Snobol中出现的东西之后建模的。查看James F. Gimpel博士撰写的简历和书籍

答案 5 :(得分:0)

虽然每个人都在引用他们没有解释为什么它是“STRing Pointer BReaK”。您将能够轻松地记住它并理解为什么strpbrk会在您想到它的基础算法时如下:

如果找到了指示符中的任何字符,则扫描STRING BREAK。