将两个等长的字符串进行比较, 一个之中含有短横线, 另一个中没有, 除短横线对应一个非短横线字符外, 其余字符都一样, 并且字符串表达式中第 3 个字符同步变化, 但输出结果却会发生变化.
在第3个字符和第2个非短横线字符相同(不论大小写)之前(以及相同时), 显示 ggg 的结果, 但之后就显示 lll 的结果.
下面示例中, 第3 个字符一直到 E 都显示 ggg 的结果, 但 f 开始及之后就显示 lll 的结果.
短横线 - 在这里究竟有什么意义, 起了什么作用?
请教~~
短横线的位置不变, 用 ' !"#$%&()*,./:;?@[\]_`{|}~+<=> 共 31 个标点符号(包括空格)逐次代换短横线(有的需转义), 发现还有 单引号 ' 也与短横线得到同样的结果, 其它字符代换的结果不随字符串表达式中 第 3 个字符的变化而变化. ... 进一步研究中...- if "e" leq "-" (echo lll) else echo ggg
- if "e0" leq "-0" (echo lll) else echo ggg
- if "e1" leq "-1" (echo lll) else echo ggg
- if "e2" leq "-2" (echo lll) else echo ggg
- if "e3" leq "-3" (echo lll) else echo ggg
- if "e4" leq "-4" (echo lll) else echo ggg
- if "e5" leq "-5" (echo lll) else echo ggg
- if "e6" leq "-6" (echo lll) else echo ggg
- if "e7" leq "-7" (echo lll) else echo ggg
- if "e8" leq "-8" (echo lll) else echo ggg
- if "e9" leq "-9" (echo lll) else echo ggg
- if "ea" leq "-a" (echo lll) else echo ggg
- if "eA" leq "-A" (echo lll) else echo ggg
- if "eb" leq "-b" (echo lll) else echo ggg
- if "eB" leq "-B" (echo lll) else echo ggg
- if "ec" leq "-c" (echo lll) else echo ggg
- if "eC" leq "-C" (echo lll) else echo ggg
- if "ed" leq "-d" (echo lll) else echo ggg
- if "eD" leq "-D" (echo lll) else echo ggg
- if "ee" leq "-e" (echo lll) else echo ggg
- if "eE" leq "-E" (echo lll) else echo ggg
- if "ef" leq "-f" (echo lll) else echo ggg
- if "eF" leq "-F" (echo lll) else echo ggg
- if "eg" leq "-g" (echo lll) else echo ggg
- if "eG" leq "-G" (echo lll) else echo ggg
- if "eh" leq "-h" (echo lll) else echo ggg
- if "eH" leq "-H" (echo lll) else echo ggg
复制代码 更多示例:复制代码 显示 lll- if d-A gtr daA (echo ggg) else echo lll
复制代码 显示 lll-
- if d'-A gtr d9aA (echo ggg) else echo lll
复制代码 显示 ggg- if d--A gtr d9aA (echo ggg) else echo lll
复制代码 显示 ggg- if d'-A gtr d9'A (echo ggg) else echo lll
复制代码 显示 ggg
初步猜测:
将 ' 或 - 定义为 后邻代字号, 后邻代字号之外的字符定义为 非后邻代字号.
' 或 - 不作向后替换时, 称 ' 或 - 为相应 后邻代字号 的原义字符.
两个字符串中, 从左至右, 逐一对应位置的字符进行比较.
如果在遇到 后邻代字号 之前出现不同, 那么依据出现不同时两个字符的大小, 来决定两个字符串的大小.
如果一直达到要比较 后邻代字号, 那么 后邻代字号 的处理方式如下:
如果一个 后邻代字号 右边紧邻一个 非后邻代字号 字符, 那么此 后邻代字号 替换为那个紧邻的非后邻代字号字符;
如果一个 后邻代字号 右边紧邻仍是一个 后邻代字号, 那么先对后面的一个 后邻代字号 进行向后替换,
再对这个 后邻代字号 作一样的替换;
如果一直是连续的 后邻代字号 直到最后也没有一个 非后邻代字号, 那么, 这些连续的 后邻代字号 全部作为相应的
原义字符处理.
如果一个 后邻代字号 被替换为一个字母, 那么对它的处理不区分大小写, 即另一个相比较的字符串中对应部分是和它替换
后相同的字母时, 将忽略它们的大小写进行比较;
但这种忽略大小写的处理如果使得比较结果是两个字符串相等, 那么 后邻代字号 仍作为 原义字符 处理再来比较.
[ 本帖最后由 neorobin 于 2009-12-24 04:16 编辑 ] |