我在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 :(得分: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