需要比较TCL 中的字符串1和字符串2
set string1 {laptop Keyboard mouse MONITOR PRINTER}
set string2 {mouse}
好吧,你可以使用:
if {$string2 in $string1} {
puts "present in the list"
}
如果您想知道在哪里,也可以使用lsearch
(它返回查找元素的索引,如果不在,则返回-1
(。当你想知道列表中的值在哪里时,这是最有用的。它还可以选择进行二进制搜索(如果你知道列表是排序的(,这比线性搜索快得多。
set idx [lsearch -exact $string1 $string2]
if {$idx >= 0} {
puts "present in the list at index $idx"
}
但是,如果您要进行大量搜索,最好使用数组或字典创建哈希表。这些非常快,但需要一些设置。安装成本是否值得取决于您的应用程序。
set words {}
foreach word $string1 {dict set words $word 1}
if {[dict exists $words $string2]} {
puts "word is present"
}
请注意,如果您处理的是普通用户输入,您可能需要一两个净化步骤。Tcl列表并不是完全的句子,一旦你进入生产阶段,这些差异就会让你大吃一惊。这方面的两个主要工具是split
和regexp -all -inline
。
set words [split $sentence]
set words [regexp -all -inline {S+} $sentence]
了解如何进行清理需要比我更全面地了解您的输入数据。
有string first
if {[string first $string2 $string1] != -1} {
puts "string1 contains string2"
}
或
if {[string match *$string2* $string1]} {
puts "string1 contains string2"
}