我有一个字符串,需要将该字符串与TCL中的字符串列表进行比较



需要比较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列表并不是完全的句子,一旦你进入生产阶段,这些差异就会让你大吃一惊。这方面的两个主要工具是splitregexp -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"
}

相关内容

  • 没有找到相关文章

最新更新