如何解决获取字符串中的每个数字并在 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 举报,一经查实,本站将立刻删除。