字符串类型

字符串类型用于存储基于文本的信息,由 string 关键字表示。字符串是 ushort 字符的序列,支持完整的 Unicode 范围,包括多国文字。例如,金融工具的名称和交易订单中的注释都是字符串。

由于字符串的特殊性质,它们的大小是一个变量值,等于文本长度的两倍(字符数量乘以字符的“宽度”,即 2 个字节)再加上一个字符。这个附加字符存储“终止零”(编码为 0 的字符),表示行结尾。此外,MQL5 使用一些空间来存储服务信息,即字符串在内存中开始位置的引用。

与 C++ 不同,在 MQL5 中无法获得字符串或任何其他变量的地址。MQL5 中禁止直接内存访问。

字符串字面量在源代码中记录为以双引号括起的字符序列。例如:"EURUSD" 或 "$"。我们应该区分由一个字符组成的字符串(如 "$")和相同的单个字符(如 '$')。它们是不同的数据类型。

空字符串表示为 ""。至于隐式终止零,除了服务信息之外,还占用 2 个字节。

如果有必要在字符串中使用双引号字符,则必须在它前面加上反斜杠字符,转换成控制序列,如 "Press \"OK\""。

MQL5/Scripts/MQL5Book/p2/TypeString.mq5 脚本中给出了字符串初始化示例。

void OnStart()
{
   string h = "Hello";          // Hello
   string b = "Press \"OK\"";   // Press "OK"
   string z = "";               //
   string t = "New\nLine";      // New
                                // Line
   string n = "123";            // 123, text (not an integer value)
   string m = "very long message "
              "can be presented " 
              "by parts";
   // equivalent:
   // string m = "very long message can be presented by parts"; 
}

h 变量中放入字符串 "Hello"。

b 变量中写入包含双引号的文本。

z 变量由空字符串初始化。这基本相当于在没有初始化的情况下描述 z,但有一些细微差别。此外,如后面的 变量的初始化章节中,我们将了解未初始化的字符串会得到一个特殊的值 NULL,与前面介绍过的 "" 不同,始终会为终止零分配内存。这种差异会影响字符串 比较运算符 以及其他某些运算符的执行。随着内容的深入,我们将涉及所有这些方面的内容。

t 变量将获得一个文本,当使用 Print 函数在日志中打印或通过其他方法显示时,该文本将被分成 2 个字符串。

n 变量中记录的字符串 "123" 并不是一个数字,虽然看起来很像。MQL5 中有一些函数可以将文本与数字相互转换(参见 数据转换)。此外,还有一组单独的函数用于 处理字符串

为了方便起见,可以将长字面量写入多个字符串中,就像 m 变量。一般规则如下: 编译器合并所有字面量,直至出现表示变量说明结束的分号。在这种格式中,切记必要时在字符串的每个片段中添加一个中间空格(例如,在上例中用空格分隔消息中的单词)。

对于字符串,定义了求和(拼接)运算,用 '+' 字符表示。我们将在涉及表达式的相关章节中讨论(参见 算术运算)。

可以单独读取字符串字符,将它们当做数组元素(参见 数组的使用):如果 s 是一个字符串,那么 s[i] 是其中第 i 个字符的代码,类型为 ushort