不同编程语言对字符串的默认支持程度不同,脚本语言倾向于让字符串操作更简单易懂,可以支持字符串和不同类型互操作。
字符串加法
- C/ObjC 把字符串当指针,两个指针相加不允许。
- C++不支持两个字符串相加
std::string s = "hello " + "world";- 但如果是字符串和整数相加,等同于指针加法,C/C++一样。
- 例如"hello" + 1是字符串"ello".
- Java/C#均支持字符串相加,包括字符串 + <其他类型>(其他类型自动转换成字符串)。
- Python支持两个字符串相加,但不允许字符串和整数相加。
- PHP利用.和.=实现字符串拼接。
- 仓颉 支持两个字符串相加,但不允许字符串和其他类型相加。如需要,其他类型必须调用toString转换成字符串。
字符串和其他类型互转
此功能并非核心需求,早期编程语言一般不自带标准类型转换字符串功能。Java/Python/JS等语言很自然加入。
- Java/C#/JS 利用toString或ToString函数完成,Python函数名更精简: str().
- C/ObjC C90标准atoi可转换字符串到int整数(其他类型有不同API,比如atol, atoll, 名称不统一);itoa不是C语言标准函数,它将int整数转换成字符串,但没有对其他数据类型的转换API,也可用sprintf完成,C++额外提供stringstream/ostringstream也可间接完成转换,C++11引入to_string(val)函数轻松完成,同时引入sto*反转为对应数据类型。
- C++为了提高效率,避免各种对象复制拷贝,提供了低层次原地转换API: to_chars和from_chars.
- 仓颉 可以用形如123.toString()返回字符串"123",用形如Int64.Parse("123")返回整数123.