内核 / 编程语言 · 2023年 10月 10日 0

字符串API

34 次浏览

字符串作为经常使用的数据类型,它们的API种类繁多,为了提升效率,不少API的底层实现可能会用更接近机器优化的代码实现。

不同语言的实现

  • 用于内核或驱动调用的copy/compare API,大部分有机器架构汇编代码实现以加速处理,WRK/Linux/XNU都是如此。

字符串子串

  • ObjC/C++/Java/C#/Kotlin 等语言均提供字符串子串API, 以方便使用。
  • Kotlin 提供substring和subSequence两种方式获取子串,第一种会生成新的字符串对象,第二种返回的只是切片/视图(或称为指针类型),只读类型,效率更高。

子串startIndex和endIndex

  • 也许大家都对C++ STL情有独钟,开始下标表示真实的下标,结束下标代表不会碰到的下标。
  • Java和Kotlin substring函数一样遵循这样的规则。Kotlin也许是为了更清晰,引入的IntRange指代的开始和结束下标均是实际下标。

特例解析

  • 忽略空白
    • C语言scanf会忽略空白字符,gets不会忽略,而以换行符为结束标志。

返回值

  • strcpy返回值还是char *, 可以方便嵌套到新的strcpy, 有时可以节省一个临时变量。