2013-07-29 48 views
0

HI我有一個字符串,如{它是一個很好的一天!是不是}。我必須將每個單詞的首字母改爲小寫,但空格也應該在那裏。爲了改變大寫,我使用了下面的代碼,但我不知道如何包含空格。 的代碼是:如何在tcl中循環中保留字符串中的空格

set wordlist { Its A Very Good Day! Isn't It }  
set newlistupper [list]  
for {set i 0} {$i < [llength $wordlist]} {incr i} { 
set word [lindex $wordlist $i] 
set newupper [string toupper $word 0 0] 
lappend newlistupper $newupper 
} 
puts $newlistupper 

我想知道如何保持空間也在輸出。請幫忙。

回答

0

我會修改當前的腳本一點點像這樣:

set wordlist { Its A Very Good Day! Isn't It }  
set newlistlower [list]  
foreach word [regexp -inline -all -- {\W+|\w+} $wordlist] { 
    set newlower [string tolower $word 0 0] 
    lappend newlistlower $newlower 
} 
puts [join $newlistlower ""] 

[regexp -inline -all -- {\W+|\w+} $wordlist]將字符串拆分爲單詞和非單詞字符,這意味着您可以保留空格和標點符號等等。

foreach允許您獲取每個單詞(空格也進入循環,但string tolower不會影響它們)。

這也將在弦如工作:

set wordlist {Its A Very Good Day! Isn't It--RIGHT } 

給:

{its a very good day! isn't it--rIGHT } 

(括號把表明右側的尾部空間保持)

+0

當我運行這個代碼它是爲我工作,但對於這個詞是不是讓它大寫,它是不是兩個字給不Isnt'T。我如何讓電腦認爲它是一個字? @Jerry – user2533429

+0

@ user2533429你可以編輯正則表達式:'[regexp -inline -all - {\ W + | \ w +(?:'\ w)?} $ wordlist]'做到這一點。你有更多這樣的案例嗎? – Jerry

+0

沒有這是唯一的情況。有用。非常感謝 :) – user2533429

0

您可以使用類似的技術,以我的回答對您previous question

set sentence { Its A Very Good Day! Isn't It } 
set lc [subst -nob -nov [regsub -all {\s[[:upper:]]} $sentence {[string tolower "&"]}]] 
puts ">$lc<" 
> its a very good day! isn't it < 

另一種方式來做到這一點

% regexp -all -inline -indices {\s[[:upper:]]} $sentence 
{1 2} {5 6} {7 8} {12 13} {17 18} {22 23} {28 29} 
% set lc $sentence 
    Its A Very Good Day! Isn't It 
% foreach match [regexp -all -inline -indices {\s[[:upper:]]} $sentence ] { 
    set lc [string replace $lc {*}$match [string tolower [string range $lc {*}$match]]] 
} 
% puts ">$lc<" 
> its a very good day! isn't it < 
相關問題