字符串

字符串基本上是具有一定长度的字符序列。该类型是传统的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

后缀

索引