String 如何检查字符串的第一个元素在TCL中是否为零?

String 如何检查字符串的第一个元素在TCL中是否为零?,string,tcl,String,Tcl,我在TCL中有以下代码: set num1 "00" set num2 "02" set num3 "12" 我想做的是: 如果第一个数字是0,则只取第二个数字。 例如: num1 is "00", then I will set num1 as "0" num2 is "02", then I will set num1 as "2" num3 is "12", then it is still "12" 如何检查第一个数字是否为零?要检查第一个字符是否为0,请使用字符串匹配: if {[

我在TCL中有以下代码:

set num1 "00"
set num2 "02"
set num3 "12"
我想做的是: 如果第一个数字是0,则只取第二个数字。 例如:

num1 is "00", then I will set num1 as "0"
num2 is "02", then I will set num1 as "2"
num3 is "12", then it is still "12"

如何检查第一个数字是否为零?

要检查第一个字符是否为
0
,请使用
字符串匹配

if {[string match "0*" $str]} {
    set rest [string range $str 1 end]
    ...
}
这个命令在这里很有用

set num1 "00"
set num2 "02"
set num3 "12"
set num4 "08"   ;# an invalid octal number

foreach val [list $num1 $num2 $num3 $num4] {puts [scan $val %d]}
要将值保存回变量,请执行以下操作:

foreach var {num1 num2 num3 num4} {
    set $var [scan [set $var] %d]
    puts "$var=[set $var]"
}

您可以使用
字符串优先
,它返回字符第一次出现的索引。如果返回0(零),则字符串以该字符开头。但是,请注意,如果您有一个很长的字符串,这可能会影响性能,因为如果字符串中没有零,它将检查每个字符直到结束

if {[string first 0 $num1] == 0} {
    set num1 [string range $num1 1 end]
}
另一种选择是使用
字符串匹配
。这可以说是解决问题的最具可读性的方法,而且运行速度非常快

if {[string match {0*} $num1]} {
    set num1 [string range $num1 1 end]
}
if {[string index $num1 0] == 0} {
    set num1 [string range $num1 1 end]
}
另一种方法是获取第一个字符并将其与零进行比较。就像使用
字符串匹配
,这将运行得非常快

if {[string match {0*} $num1]} {
    set num1 [string range $num1 1 end]
}
if {[string index $num1 0] == 0} {
    set num1 [string range $num1 1 end]
}

谢谢Bryan,您可以使用字符串范围;-)如果{[string range$num1 01]==“0”}{put“它以零开头”}或者字符串索引如果{[string index$num1 0]==“0”,我真的不会首先使用
字符串
;即使第一个字符不是
0
,它也会继续搜索。