字符串
字符串基本上是具有一定长度的字符序列。该类型是传统的C++字符串类型,仅通过UTF-8编码支持Unicode。
字符串是8位干净的,这意味着所有256个字符(包括nul)都可能出现在其中。
但是字符串文字不能直接包含nul。字符串文字实际上是C NUL终止的字符串字符串,它们被自动提升到C++。
类型
Felix中的字符串类型是基于C++的:
type string = "::std::basic_string<char>"
requires Cxx_headers::string
;
直接常量
字符串文字有两种简单形式:
var x = "I am a string";
var y = 'I am a string too';
使用双引号分隔符和单引号分隔符。这些文字不能超过一行。但是,您可以通过并置将它们连接起来:
var verse =
"I am the first line,\n"
'and I am the second.'
;
注意特殊的编码 \n 它在字符串中插入行尾字符而不是 \ 然后是 n . 这叫做逃跑。
您可以防止使用如下原始字符串转换转义符:
r"This \n is retained as two chars"
只有双引号字符串可以是原始字符串。
Felix还有三重引号字符串,跨越行边界,并在文本中包括行尾:
它在字符串中包含两个行尾字符,而这个字符:
'''
Here is another
long string
'''
有三个行尾(第一个三引号后面有一个)。
长度
使用 len 功能:
var x = "hello";
var y = x.len.int;
级联
字符串可以用中缀连接起来 + 运算符或只是相邻书写,并置的优先级高于中缀 + .
var x = "middle";
var y = "Start" x + "end";
在这种情况下,首先完成x的第一个连接,然后是附加“end”的第二个连接。结果与排序无关,因为连接是关联的,而运行时性能则不是,因为连接需要复制。
子串提取
可以使用切片提取字符串的子字符串,其符号如下所示:
var x = "Hello World";
var y = x.[3..7]; // 'lo Wo'
索引
选择第n个字符:
var x = "Hello World";
var y = x.[1]; // e
比较
字符串完全使用标准的字典逻辑排序进行排序,并支持常用的比较运算符。
摘要:字符串比较
算符 |
类型 |
句法 |
语义 |
---|---|---|---|
= |
字符串*字符串->布尔 |
中缀 |
平等 |
!= |
字符串*字符串->布尔 |
中缀 |
不相等 |
<= |
字符串*字符串->布尔 |
中缀 |
小于等于 |
< |
字符串*字符串->布尔 |
中缀 |
更少 |
> |
字符串*字符串->布尔 |
中缀 |
大于或等于 |
> |
字符串*字符串->布尔 |
中缀 |
更大的 |
双重汇总操作
算符 |
类型 |
句法 |
语义 |
---|---|---|---|
伦恩 |
字符串->大小 |
前缀 |
长度 |
+ |
字符串*字符串->字符串 |
中缀 |
级联 |
.[_] |
字符串*切片->字符串 |
后缀 |
子字符串 |
.[_] |
字符串*int->char |
后缀 |
索引 |