字符串运算符
本节列出了将字符串作为参数的运算符。此外,还将处理从其他值生成字符串的运算符。
基本字符串操作
字符串串联:字符串1›+字符串2›
说明:这个+
运算符还可以用于将一个字符串附加到另一个字符串。这样一个操作的结果还是一个字符串。如果在加法运算中,至少有一个参数是字符串,则另一个参数将自动转换为其值的字符串表示形式。
“辛迪”+“脚本”
“CindyScript”
“四加三等于”+(4+3)
“四加三等于七”
""+(4+3)
"7"
另请参见:这个+
运算符还用于添加常用数值。为此,请参阅算术运算符.
转换为字符串:文本(expr›)
说明:操作员文本(expr›)
计算表达式出口›
并将结果转换为字符串表示形式。
文本(7.2)
“7.2”
文本([true,“foo”,(;)])
“[true,foo,___]”
未定义的输入在灰姑娘中产生未定义的输出:
在CindyJS中,输出仍然是字符串,以避免出现拐角情况。
几何对象自动与数学值交互
创建点(“A”,[6,4,2]);文本(A)
"[3, 2]"
字符串长度:长度(字符串›)
说明:此运算符返回字符串中的字符数。
例子:
长度(“CindyScript”)
计算为整数11
.
另请参阅:
列表和线性代数
提取子字符串:子串(字符串›,int1›,int2›)
说明:此运算符返回的子字符串字符串›
开始于由整数索引的字符之后整数›
并以索引的字符结尾int2›
.
例子:
子字符串(“abcdefg”,3,6)
计算为字符串“定义”
.
搜索事件:索引(字符串1›,字符串2›)
说明:此运算符搜索第一次出现的字符串2›
在里面字符串1›
.返回第一次出现的索引。如果字符串2›
不是的子字符串›字符串1›
,则值0
返回。
indexof(“CindyScript”,“i”)
2
索引(“CindyScript”,“y”)
5
索引(“CindyScript”,“z”)
0
搜索事件:indexof(字符串1›,字符串2›,⁄int›)
说明:此运算符搜索第一次出现的字符串2›
在里面字符串1›
索引之后我
.返回第一个此类事件的索引。如果字符串2›
不发生在字符串1›
索引之后我
.,然后是值0
返回。
索引(“CindyScript”,“i”,1)
2
索引(“CindyScript”,“i”,3)
9
索引(“CindyScript”,“i”,10)
0
高级字符串操作
剖析字符串:标记化(字符串›,expr›)
说明:此运算符对于解析输入非常有用。它创建的子字符串列表字符串›
.第二个参数出口›
必须是字符串或字符串列表。如果出口›
是一个字符串,则运算符在字符串›
.这些事件可以作为将字符串›分解为碎片列表的标记。
如果expr›是字符串列表,则会生成一个分层列表表示的细分字符串›
通过列表中的标记递归。
标记化(“一:二..三:四”,“:”)
[“一”、“二..三”、“四”]
标记化(“一:二…三:四”,“.”)
[“一:二”、“”、“三:四”]
标记化(“一:二..三:四”,“..”)
[“一:二”,“三:四”]
标记化(“一:二..三:四”,[“.”,“:”])
[[“一”、“二”]、[“”]、[[“三”、“四”]]
标记化(“一:二..三:四”,[“..”,“:”])
[[“一”、“二”]、[“三”、“四”]]
标记化(“(1;2)”,“;”)
[“(1”,“2)”]
标记化
通常将数字的字符串表示转换为数字对象。这可能会导致信息丢失。在Java版本中,转换如下所示:
只有灰姑娘
标记化(“7777777777”,“:”)
[77777777777777776]
然而,在JavaScript中ECMAScript的舍入规则强制使用尾随零:
只有CindyJS
标记化(“7777777777”,“:”)
[77777777777777780]
要禁用此行为,请使用自动转换
修改器并将其设置为假
.
标记化(“7777777777”,“:”,autoconvert->false)
["77777777777777777"]
可以使用空分隔符列表实现无需拆分的数字转换:
标记化(“1234”,[])+1
1235
标记化(“x1234”,[])+1
“x12341”
串中替换:更换(字符串1›、字符串2›、字符串3›)
说明:该操作符将所有出现的(!)个“字符串2›”替换为“字符串1›”中的“字符串3›”。
这个操作符对于创建在所谓的Lindenmeyer系统中使用的文本替换系统非常有用。
替换(“一:二..三:四”,“o”,“XXX”)
“XXXne:twXXX..three:fXXXur”
替换(“F”、“F”和“F+F”)
“F+F”
替换(“F+F”、“F”、”F+F“)
“F+F+F+F+F”
替换(“3*$+4”,“$”,“x”)
“3*x+4”
替换(“1\2”、“\”、“$&”)
"1$&2"
串中替换:替换(字符串›,列表›)
说明:这个运算符与上一个运算符非常相似。列表›
包含替换对列表,所有此类替换同时应用于字符串›
.
替换(“XYX”,[[“X”,“one”],[“Y”,“two”]])
“一二一”
分析字符串:解析(字符串›)
说明:此运算符将字符串解析为表达式并计算此表达式。此运算符在处理来自构造中的文本字段的用户输入时特别有用。
代码片段
text=“sin(x)+cos(x)”;f(x):=解析(文本);
定义函数f(x)
成为正弦(x)+余弦(x)
.
分析CSV字符串:parseCSV(字符串›)
说明:此运算符将逗号分隔值(CSV)字符串解析为列表列表。
只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(“Foo,1.02.3巴正确,5.0.7")
[[“Foo”,1],[“Bar”,2.3],[真,“5.0.7”]]
CSV文件中的所有行应具有相同的列数。如果不是这样,则用___
.
只有CindyJS:parseCSV还没有为Cinderella实现
解析CSV(“11,1221、22、23、24,31,32, 3341")
[[11, 12, ___, ___, ___], [21, 22, 23, 24, ""], [31, 32, " 33", ___, ___], [41, ___, ___, ___, ___]]
数字和布尔值被转换为各自的CindyScript对应项。如果这不是期望的行为自动转换
修饰符可以设置为假
.
只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(“Foo,1.0,true,bar”,自动转换->false)
[[“Foo”,“1.0”,“true”,“bar”]]
布尔值的第一个字母可以大写,但其余字母必须小写。
只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(“真、真、真,真、假、假、反、反”)
[[true,true,“true”,“true”,false,false,“false”,“false”,“false”]]
当前实现不自动转换科学记数法。然而,它确实处理无限值。然而,在未来的版本中,这可能会发生变化,所以不要依赖于此。
只有CindyJS:parseCSV还没有为Cinderella实现
解析CSV(“1e2,1e+2,1e-2无限、+无限、-无限100,+100,-100")
[[“1e2”,“1e+2”,“1-2”],[无穷,无穷,-无穷],[100,100,-100]]
字符串可以用双引号括起来。在这样一个带引号的字符串中,双引号的出现次数必须加倍。以下示例写入'
代表"
,然后使用unicode(“22”)
用实际的"
字符。
只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(替换(“a,'b,c'’d'',e',fg、 h'i'j、'kl、 m,n'“,”“,unicode(”22“))
[[“a”,“b”,c\“d\”,“e”,“f”],[“g”,“h\”i\“j”,“k\nl,m,n”]]
行可以通过回车、换行、,或回车,后跟换行符。输入可以混合使用行尾约定。
只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(替换(replace(“1,2\n3,4\r5,6\n\r7,8\r\n9,10”,“\r”,unicode(“0D”),“\n”,unicode(“0A”))
[[1, 2], [3, 4], [5, 6], ["", ___], [7, 8], [9, 10]]
最后一行的行终止符是可选的。如果最后一行以空字段结尾,由于实现的内部原因,这可能很棘手。
只有CindyJS:parseCSV还没有为Cinderella实现
解析CSV(“1,211,“)
[[1, 2], [11, ""]]
解析CSV(“1,2,311,")
[[1, 2, 3], [11, "", ___]]
解析CSV(“1,”)
[[1, ""]]
解析CSV(“111,")
[[1,___],[11,“”]]
修饰符分隔符
可用于设置分列字符。该修饰符的参数必须是单个字符,不包括"
、换行符和回车符。默认分隔符是逗号(如CSV名称所示)。
只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(“1;2,3;4.5”,分隔符->“;”)
[[1, "2,3", 4.5]]
由于可能的特殊含义,一些分隔符需要额外检查在内部实现中,因此在这里检查这些。
只有CindyJS:parseCSV还没有为Cinderella实现
解析CSV(“1,2d3”,分隔符->“d”)
[["1,2", 3]]
parseCSV(“1,2.3”,分隔符->“.”)
[["1,2", 3]]
parseCSV(“1,2$3”,分隔符->“$”)
[["1,2", 3]]
猜测数字的良好表示:猜测(›数字›)
CindyJS中尚不可用!
说明:这一功能强大的操作符将在本节中详细描述微积分.它采用浮点表示形式的数值表达式,并尝试将其转换为数学表达式,以高精度生成该浮点数。然后将此表达式表示为字符串。
跳过测试:猜测尚未实现
猜测(8.125)
"65/8"
猜测(0.774596669241483)
“平方英尺(3/5)”
另请参见:
微积分
说明:此运算符以数字作为第一个参数,以整数指定小数点后的位数。将生成一个字符串,该字符串与指定精度以下的数字相对应。灰姑娘最多可输入14位数字,灰姑娘最多可以输入20位数字。如果format参数是一个对象列表,那么format语句将递归地应用于每个对象。
格式(sqrt(2),4)
"1.4142"
格式(π,14)
"3.14159265358979"
格式(1.23456+98.765432*i,2)
“1.23+i*98.77”
格式([sin(30°),cos(30°)],3)
["0.5", "0.866"]
如果第一个参数既不是数字也不是列表,则结果为___
.然而,如果它是一个列表,并且嵌套在该列表中的某个地方是一个既不是数字也不是列表的值,那么该值将被转换为自身的字符串表示。
格式(“foo”,4)
___
格式(1<2,4)
___
格式([2.339,“foo”,[5.678,1<2],2)
[“2.34”,“foo”,[“5.68”,“true”]]
修饰符分隔符
可用于设置小数分隔符。
只有CindyJS:“分隔符”修饰符在Cinderella中不可用。
格式(1.23456,2,分隔符->“,”)
"1,23"
修饰符截断
可以用来防止输出被截断。
只有CindyJS:“truncate”修饰符在Cinderella中不可用。
格式(1,2,truncate->false)
"1.00"
请求超过20位数字将永远不会有任何效果。
format(1/3,20)==格式(1/3,40)
真的
警告:生成format语句只应用于创建格式化的输出元素。格式化值将始终为串因此,算术运算的对象通常无效。以下示例说明了这一点:
格式(sqrt(2),4)+格式(sqrt(2),4)
"1.41421.4142"
字符串比较和排序
与实数一样,字符串也接受总排序。因此,可以使用运算符对它们进行比较>
,<
,>=
,<=
,==
、和!=
.请参阅布尔算子为了使用这些关系。
字符串的顺序是字典顺序。因此,例如,
“a”<“abd”<“ab”<“b”<“blue”<“burth”<“xxx”
对字符串列表进行排序
说明:
各种版本的这个分类
操作人员可用于对包含字符串值的列表进行排序。排序顺序通常被认为是单词的字典顺序。或者,可以指定用户定义的排序函数,例如字符串的长度。
排序([“一”、“二”、“三”、“四”、“五”])
[“五”、“四”、“一”、“三”、“二”]
排序([“一”,“二”,“三”,“四”,“五”],长度(#))
[“一”、“二”、“四”、“五”、“三”]
另请参见:
列表和线性代数,高级列表操作
访问和替换字符
索引运算符:字符串›_int›
说明:中缀运算符_
访问列表字段的,也可以用于访问字符串中特定位置的字符。可以使用此运算符返回和设置字符。
“CindyScript”_5
“y”
“CindyScript”_[1,6]
[“C”、“S”]
“CindyScript”_12
警告:索引超出范围!
___
a=“CindyScript”;a_5=“埃雷拉”;一
“灰姑娘脚本”
在本例中,单个字母已被较长的字符串替换。
中缀运算符_
也用于列表订阅。这两种形式可以结合使用,既可以用于阅读,也可以用于写作。
b=“辛迪”;a=[b,“脚本”];a_1_5=“瑞拉”;一
[“灰姑娘”,“脚本”]
只有灰姑娘:已知的灰姑娘臭虫#83
b条
“辛迪”