2014-02-24 27 views
0

我在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

要檢查第一個字符是0,使用string match

if {[string match "0*" $str]} { 
    set rest [string range $str 1 end] 
    ... 
} 
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 
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] 
} 
+0

感謝布賴恩可以使用字符串範圍;-)如果{[字符串範圍$ NUM1 0 1] ==「0」} {放「它開始於零」}或字符串索引如果{[字符串索引$ num1 0] ==「0 」 –

+0

我真的不會使用'字符串第一'這個;即使第一個字符不是'0',它也會繼續搜索。 –

+0

@DonalFellows:好點。我會更新我的答案。 –

相關問題