字符串作为经常使用的数据类型,它们的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, 有时可以节省一个临时变量。