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

时间:2014-02-24 15:20:02

标签: 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"

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

3 个答案:

答案 0 :(得分:2)

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

if {[string first 0 $num1] == 0} {
    set num1 [string range $num1 1 end]
}

另一种选择是使用string match。这可以说是解决问题最可读的方法,而且运行速度非常快。

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

另一种方法是获得第一个字符并将其与零进行比较。与使用string match一样,这将非常快速地运行。

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

答案 1 :(得分:0)

要检查第一个字符是否为0,请使用string match

if {[string match "0*" $str]} {
    set rest [string range $str 1 end]
    ...
}

答案 2 :(得分:0)

scan命令在这里很有用

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]}
0
2
12
8

将值保存回变量:

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