Version 7 of string length

Updated 2003-10-17 13:08:25

Subcommand of string, returns the length of its argument in (Unicode) characters, which may differ from the result of string bytelength on the same string (because of the UTF-8 implementation).

If you want to use a name familiar from C, you might do this:

 interp alias {} strlen {} string length

2003-10-17 in the Tcl chatroom, some of us played around with silly pure-Tcl implementations of string length:

 proc strlen s {
    set n 0
    foreach char [split $s ""] {incr n}
    set n
 } ;# RS

 proc strlen s {llength [split $s ""]} ;# AM

 proc strlen string {
    regsub -all . $string +1 string
    expr 0$string
 } ;# MS

jcw - does the above perhaps need a -all? Also, why not simply:

   return [regexp -all . $string]

MS indeed; corrected now. In the why not simply department, why not

   regexp -all . $string

or using aliases

   interp alias {} strlen {} regexp -all . ;# MS

 proc strlen string {expr 0[regsub -all . $string +1]} ;# dkf

The functional way:

 proc strlen {s} {
   expr {[regexp {.(.*)} $s - s] ? (1+[strlen $s]) : 0}
 } ;# EB

Powers of ten (sorrily, this works only for short strings):

 proc strlen s {
   expr round(log10(1.[regsub -all . $s *10]))
 } ;# RS

Category Command | Arts and crafts of Tcl-Tk programming