微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取字符串中的每个数字并在 TCL/tk 中进行比较

如何解决获取字符串中的每个数字并在 TCL/tk 中进行比较

我有字符串输出

1 4 2 1 4

我想比较字符串中的每个字符。 我这样做是想知道列表是否已排序。

解决方法

我不太清楚您要实现的目标。通过“了解列表是否已排序”,并假设一个整数列表,您可以使用 tcl::mathop::<tcl::mathop::<=,具体取决于您是否希望允许重复值:

if {[tcl::mathop::<= {*}$list]} {
    puts "List is sorted"
} else {
    puts "List is mixed up"
}

这也适用于字符串的 ASCII 比较。对于更复杂的比较,例如使用字典规则或不区分大小写,将其与 lsort-indices 选项结合使用可能是最简单的:

tcl::mathop::< {*}[lsort -indices -dictionary $list]

-indices 选项按排序顺序返回每个列表元素的原始索引。通过检查这些索引是否按递增顺序排列,您可以知道原始列表是否已经排序。

当然,如果练习的目的是为了避免不必要的排序,那么这是没有用的。但是话又说回来,已经排序的列表的冒泡排序非常快,并且基本上会完全按照您描述的进行比较。因此,仅排序可能比首先通过脚本循环检查排序列表要快。

,

要获取字符串中的每个字符,请执行 split $the_string "" (是的,在空字符串上)。这为您提供了字符串中所有字符的列表;您可以使用 foreach 迭代它们。请记住,您可以一次迭代两个(或更多)列表:

foreach c1 [split $the_string ""] c2 $target_comparison_list {
    if {$c1 ne $c2} {
        puts "The first not equal character is “$c1” when “$c2” was expected"
        break
    }
}

请注意,发现差异后继续比较很少有用,因为最常见的差异是(相对于目标字符串)插入和删除;几乎一切之后都会有所不同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。