2013-07-29 2 views
1

Например, у меня есть предложение: whAT is yOUR hoUSe nUmBer? Является ли iT 26. Мне нужно преобразовать все первые первые буквы каждого слова в верхний регистр и отдохнуть в нижнем регистре. Я предполагаю использовать все lsearch, lindex lreplace и прочее и сформировать код. Может ли кто-нибудь сказать мне, как это сделать?Как преобразовать строку, в которой первая буква находится в верхнем регистре, а остальные - в нижнем регистре.

ответ

-1

Вы можете использовать функцию Initcap для создания 1-й буквы в верхнем регистре и отдыха в нижнем регистре.

+3

Я инициализирую fooBar в интерактивном сеансе (Tcl 8.5.10) и получаю 'недопустимое имя команды« Initcap »', так что вы говорите? – kostix

+0

Извините, но я не знаком с функцией Initcap. – user2533429

3

Команда string totitle близка: она уменьшает всю строку, за исключением первого символа верхнего регистра.

set s {whAT is yOur hoUSe nUmBer ? Is iT 26.} 
string totitle $s 
What is your house number ? is it 26. 

Капитализировать каждое слово немного сложнее:

proc CapitalizeEachWord {sentence} { 
    subst -nobackslashes -novariables [regsub -all {\S+} $sentence {[string totitle &]}] 
} 
set s {whAT is yOur hoUSe nUmBer ? Is iT 26.} 
CapitalizeEachWord $s 
What Is Your House Number ? Is It 26. 

Команда regsub принимает каждое разделенных пробелами слово и заменяет его символьной строки "[string totitle Слово]":

"[string totitle whAT] [string totitle is] [string totitle yOur] [string totitle hoUSe] [string totitle nUmBer] [string totitle ?] [string totitle Is] [string totitle iT] [string totitle 26.]" 

Мы используем команду subst для оценки всех отдельных команд «string totitle».

+0

В общем случае потребуется немного больше работы (чтобы отбросить любые метасимволы Tcl во входной строке), но это разумный подход. –

Смежные вопросы