Las funciones de cadena se utilizan en lenguajes de programación de computadoras para manipular una cadena o consultar información sobre una cadena (algunas hacen ambas cosas).
La mayoría de los lenguajes de programación que tienen un tipo de datos de cadena tendrán algunas funciones de cadena, aunque puede haber otras formas de bajo nivel dentro de cada lenguaje para manejar cadenas directamente. En los lenguajes orientados a objetos, las funciones de cadena suelen implementarse como propiedades y métodos de objetos de cadena. En los lenguajes funcionales y basados en listas, una cadena se representa como una lista (de códigos de caracteres), por lo tanto, todos los procedimientos de manipulación de listas podrían considerarse funciones de cadena. Sin embargo, dichos lenguajes también pueden implementar un subconjunto de funciones explícitas específicas de cadenas.
Para las funciones que manipulan cadenas, los lenguajes modernos orientados a objetos, como C# y Java, tienen cadenas inmutables y devuelven una copia (en la memoria dinámica recién asignada), mientras que otros, como C , manipulan la cadena original a menos que el programador copie los datos en una nueva cadena. Véase, por ejemplo, Concatenación a continuación.
El ejemplo más básico de una función de cadena es la length(string)
función. Esta función devuelve la longitud de una cadena literal .
length("hello world")
, devolvería 11.Otros lenguajes pueden tener funciones de cadena con sintaxis, parámetros o resultados similares o exactamente iguales. Por ejemplo, en muchos idiomas la función de longitud suele representarse como len(string) . La siguiente lista de funciones comunes tiene como objetivo ayudar a limitar esta confusión.
Las funciones de cadena comunes a muchos idiomas se enumeran a continuación, incluidos los diferentes nombres utilizados. La siguiente lista de funciones comunes tiene como objetivo ayudar a los programadores a encontrar la función equivalente en un lenguaje. Tenga en cuenta que la concatenación de cadenas y las expresiones regulares se manejan en páginas separadas. Las declaraciones en guillemets («…») son opcionales.
{Ejemplo en Pascal} var MyStr : string = 'Hola mundo' ; MiCar : Char ; comenzar MyChar := MyStr [ 2 ] ; // 'e'
# Ejemplo en ALGOL 68 #"Hola mundo"[2]; // 'e'
// Ejemplo en C #include <stdio.h> // para printf char MyStr [] = "Hola mundo" ; printf ( "%c" , * ( MiCadena + 1 )); // 'e' printf ( "%c" , * ( MyStr + 7 )); // 'W' printf ( "%c" , MyStr [ 11 ]); // 'd' printf ( "%s" , MyStr ); // 'Hola, Mundo' printf ( "%s" , "Hola(2), Mundo(2)" ); // 'Hola(2), Mundo(2)'
// Ejemplo en C++ #include <iostream> // para "cout" #include <string.h> // para el tipo de datos "string" usando el espacio de nombres std ; char MyStr1 [] = "Hola(1), Mundo(1)" ; string MyStr2 = "Hola(2), Mundo(2)" ; cout << "Hola(3), Mundo(3)" ; // 'Hola(3), Mundo(3)' cout << MyStr2 [ 6 ]; // '2' cout << MiCadena1 . substr ( 5 , 3 ); // '(1)'
// Ejemplo en C# "Hola mundo" [ 2 ]; // 'l'
# Ejemplo en Perl 5 substr ( "Hola mundo" , 1 , 1 ); # 'e'
# Ejemplos en Python "Hola, mundo" [ 2 ] # 'l' "Hola, mundo" [ - 3 ] # 'r'
# Ejemplo en Raku "Hola mundo" . substr ( 1 , 1 ); # 'e'
' Ejemplo en Visual Basic Mid ( "Hola mundo" , 2 , 1 )
' Ejemplo en Visual Basic .NET "Hola mundo" . Caracteres ( 2 ) ' "l"c
" Ejemplo en Smalltalk " 'Hola mundo' en: 2 . "$e"
//Ejemplo en Rust "Hola mundo" . caracteres (). enésimo ( 2 ); // Algunos('l')
# Ejemplo en Perl 5 "hola" cmp "mundo" ; # devuelve -1
# Ejemplo en Python cmp ( "hola" , "mundo" ) # devuelve -1
# Ejemplos en Raku "hola" cmp "mundo" ; # devuelve Menos "mundo" cmp "hola" ; # devuelve Más "hola" cmp "hola" ; # devuelve lo mismo
/** Ejemplo en Rexx */ compare ( "hello" , "world" ) /* devuelve índice de discrepancia: 1 */
; Ejemplo en esquema ( use-modules ( srfi srfi-13 )) ; devuelve índice de discrepancia: 0 ( cadena-comparar valores "hola" "mundo" valores valores )
% Ejemplo en Erlang "hola" > "mundo" . % devuelve falso
# Ejemplo en Raku "arte" gt "pintura" ; # devuelve False "arte" lt "pintura" ; # devuelve Verdadero
# Ejemplo en Windows PowerShell "hola" -gt "mundo" # devuelve falso
;; Ejemplo en Common Lisp ( cadena> "arte" "pintura" ) ; devuelve nulo ( cadena < "arte" "pintura" ) ; devuelve no nulo
{ Ejemplo en Pascal } 'abc' + 'def' ; // devuelve "abcdef"
// Ejemplo en C# "abc" + "def" ; // devuelve "abcdef"
' Ejemplo en Visual Basic "abc" & "def" ' devuelve "abcdef" "abc" + "def" ' devuelve "abcdef" "abc" & Null ' devuelve "abc" "abc" + Null ' devuelve Null
// Ejemplo en D "abc" ~ "def" ; // devuelve "abcdef"
;; Ejemplo en ceceo común ( concatenar 'cadena "abc " "def " "ghi" ) ; devuelve "abc def ghi"
# Ejemplo en Perl 5 "abc" . "definitivamente" ; # devuelve "abcdef" "Perl" . 5 ; # devuelve "Perl 5"
# Ejemplo en Raku "abc" ~ "def" ; # devuelve "abcdef" "Perl" ~ 6 ; # devuelve "Perl 6"
¢ Ejemplo en ALGOL 68 ¢cadena en cadena ("e", loc int , "Hola amigo"); ¢ devuelve verdadero ¢cadena en cadena ("z", loc int , "palabra"); ¢ devuelve falso ¢
// Ejemplo en C# "Hola amigo" . Contiene ( "e" ); // devuelve verdadera "palabra" . Contiene ( "z" ); // devuelve falso
# Ejemplo en Python "e" en "Hola amigo" # devuelve verdadero "z" en "palabra" # devuelve falso
# Ejemplo en Raku "¡Buenos días!" . contiene ( 'z' ) # devuelve False "¡Buenos días!" . contiene ( 'í' ); # devuelve Verdadero
" Ejemplo en Smalltalk " 'Hola amigo' incluye Subcadena: 'e' " devuelve verdadero " ' palabra ' incluye Subcadena: 'z' " devuelve falso "
Prueba si dos cadenas son iguales. Vea también #Comparar y #Comparar. Tenga en cuenta que realizar comprobaciones de igualdad a través de una comparación genérica con un resultado entero no sólo es confuso para el programador sino que a menudo es una operación significativamente más costosa; Esto es especialmente cierto cuando se utilizan " cuerdas C ".
// Ejemplo en C# "hola" == "mundo" // devuelve falso
' Ejemplo en Visual Basic "hola" = "mundo" ' devuelve falso
# Ejemplos en Perl 5 'hola' eq 'mundo' # devuelve 0 'hola' eq 'hola' # devuelve 1
# Ejemplos en Raku 'hola' eq 'mundo' # devuelve False 'hola' eq 'hola' # devuelve Verdadero
# Ejemplo en Windows PowerShell "hola" -eq "mundo" # devuelve falso
⍝ Ejemplo en APL 'hola' ≡ 'mundo' ⍝ devuelve 0
Ejemplos
( buscar "e" "Hola amigo" ) ; devuelve 1 ( busca "z" "palabra" ) ; devuelve NULO
"Hola compañero" . Índice de ( "e" ); // devuelve 1 "Hola amigo" . Índice de ( "e" , 4 ); // devuelve 9 "palabra" . Índice de ( "z" ); // devuelve -1
"¡Hola!" . index ( 'e' ) # devuelve 1 "¡Hola!" . índice ( 'z' ) # devuelve cero
( use-modules ( srfi srfi-13 )) ( cadena-contiene "Hola amigo" "e" ) ; devuelve 1 ( cadena-contiene "palabra" "z" ) ; devuelve #f
' Ejemplos en InStr ( "Hola compañero" , "e" ) ' devuelve 2 InStr ( 5 , "Hola compañero" , "e" ) ' devuelve 10 InStr ( "palabra" , "z" ) ' devuelve 0
'Hola amigo' indexOfSubCollection: 'comió' "devuelve 8"
'Hola amigo' indexOfSubCollection: 'tarde' "devuelve 0"
I ' Hola amigo ' indexOfSubCollection: 'tarde' ifAbsent: [ 99 ] "devuelve 99"
'Hola compañero' indexOfSubCollection: 'tarde' ifAbsent: [ error propio ] "genera una excepción"
// Ejemplos en C# "Hola amigo" . Índice de ( 'e' ); // devuelve 1 "palabra" . Índice de ( 'z' ) // devuelve -1
; Ejemplos en Common Lisp ( posición #\e "Hola amigo" ) ; devuelve 1 ( posición #\z "palabra" ) ; devuelve NULO
^a Dado un conjunto de caracteres, SCAN devuelve la posición del primer carácter encontrado, [19] mientras que VERIFY devuelve la posición del primer carácter que no pertenece al conjunto. [20]
// Ejemplo en C# Cadena . Formato ( "Mi {0} cuesta {1:C2}" , "bolígrafo" , 19,99 ); // devuelve "Mi bolígrafo cuesta $19,99"
// Ejemplo en formato Object Pascal (Delphi) ( 'Mi %s cuesta $%2f' , [ 'pluma' , 1 9,99 ]) ; // devuelve "Mi bolígrafo cuesta $19,99"
// Ejemplo en cadena Java . formato ( "Mi %s cuesta $%2f" , "bolígrafo" , 19,99 ); // devuelve "Mi bolígrafo cuesta $19,99"
# Ejemplos en Raku sprintf "Mi %s cuesta \$%.2f" , "bolígrafo" , 19,99 ; # devuelve "Mi bolígrafo cuesta $19,99" 1 . fmt ( "%04d" ); # devuelve "0001"
# Ejemplo en Python "Mi %s cuesta $ %.2f " % ( "bolígrafo" , 19,99 ); # devuelve "Mi bolígrafo cuesta $19,99" "Mi {0} cuesta $ {1:.2f} " . formato ( "bolígrafo" , 19,99 ); # devuelve "Mi bolígrafo cuesta $19,99"
#Ejemplo en Python 3.6+ pluma = "pluma" f "Mi { pluma } cuesta { 19,99 } " #returns "Mi pluma cuesta 19,99"
; Ejemplo en Scheme ( formato "Mi ~a cuesta $~1,2F" "bolígrafo" 19,99 ) ; devuelve "Mi bolígrafo cuesta $19,99"
/* ejemplo en PL/I */ put string ( some_string ) edit ( ' My ' , ' pen ' , ' costs ' , 19.99 )( a , a , a , p ' $$$V .99 ' ) /* devuelve "Mi bolígrafo cuesta $19,99" */
Prueba si dos cadenas no son iguales. Ver también #Igualdad.
// Ejemplo en C# "hola" != "mundo" // devuelve verdadero
' Ejemplo en Visual Basic "hola" <> "mundo" ' devuelve verdadero
;; Ejemplo en Clojure ( not= "hola" "mundo" ) ; ⇒ verdadero
# Ejemplo en Perl 5 'hola' ne 'mundo' # devuelve 1
# Ejemplo en Raku 'hola' ne 'mundo' # devuelve Verdadero
# Ejemplo en Windows PowerShell "hola" -ne "mundo" # devuelve verdadero
ver #Encontrar
ver #Encontrar
ver #Encontrar
ver #rfind
// Ejemplo en C# Cadena . Unirse ( "-" , { "a" , "b" , "c" }) // "abc"
" Ejemplo en Smalltalk " #( 'a' 'b' 'c' ) joinUsing: '-' " 'abc' "
# Ejemplo en Perl 5 join ( '-' , ( 'a' , 'b' , 'c' )); # 'a B C'
# Ejemplo en Raku <ab c> . unirse ( '-' ); # 'a B C'
# Ejemplo en Python "-" . unirse ([ "a" , "b" , "c" ]) # 'abc'
# Ejemplo en Ruby [ "a" , "b" , "c" ]. unirse ( "-" ) # 'abc'
; Ejemplo en esquema ( use-modules ( srfi srfi-13 )) ( string-join ' ( "a" "b" "c" ) "-" ) ; "a B C"
ver #rfind
# Ejemplo en Raku "¡Hola!" . substr ( 0 , 6 ); # devuelve "Hola"
/* Ejemplos en Rexx */ left ( "abcde" , 3 ) /* devuelve "abc" */ left ( "abcde" , 8 ) /* devuelve "abcde " */ left ( "abcde" , 8 , "*" ) /* devuelve "abcde***" */
; Ejemplos en Scheme ( use-modules ( srfi srfi-13 )) ( string-take "abcde" , 3 ) ; devuelve "abc" ( string-take "abcde" , 8 ) ; error
'Ejemplos en Visual Basic Izquierda ( "sandroguidi" , 3 ) ' devuelve "san" Izquierda ( "sandroguidi" , 100 ) ' devuelve "sandroguidi"
ver #longitud
// Ejemplos en C# "hola" . Longitud ; // devuelve 5 "" . Longitud ; // devuelve 0
# Ejemplos en cadena Erlang : len ( "hola" ). % devuelve 5 cadenas : len ( "" ). % devuelve 0
# Ejemplos en Perl 5 longitud ( "hola" ); # devuelve 5 longitud ( "" ); # devuelve 0
# Ejemplos en Raku "🏳️🌈" . caracteres ; caracteres "🏳️🌈" ; # ambos devuelven 1 "🏳️🌈" . códigos ; códigos "🏳️🌈" ; # ambos devuelven 4 "" . caracteres ; caracteres "" ; # ambos devuelven 0 "" . códigos ; códigos "" ; # ambos devuelven 0
' Ejemplos en Visual Basic Len ( "hola" ) ' devuelve 5 Len ( "" ) ' devuelve 0
//Ejemplos en Objective-C [ @"hello" Longitud ] //devuelve 5 [ @"" Longitud ] //devuelve 0
-- Ejemplos en Lua ( "hola" ): len () -- devuelve 5 # "" -- devuelve 0
ver #Encontrar
// Ejemplo en C# "¿Wiki significa rápido?" . Reducir (); // "¿wiki significa rápido?"
; Ejemplo en Scheme ( use-modules ( srfi srfi-13 )) ( string-downcase "¿Wiki significa rápido?" ) ; "¿wiki significa rápido?"
/* Ejemplo en C */ #include <ctype.h> #include <stdio.h> int main ( void ) { char string [] = "¿Wiki significa rápido?" ; int yo ; for ( i = 0 ; i < sizeof ( string ) - 1 ; ++ i ) { /* transforma los caracteres en su lugar, uno por uno */ string [ i ] = tolower ( string [ i ]); } pone ( cadena ); /* "¿wiki significa rápido?" */ devolver 0 ; }
# Ejemplo en Raku "¿Wiki significa rápido?" . lc ; # "¿wiki significa rápido?"
ver #subcadena
# Ejemplos en Python "El spam genera spam y jamón" . partición ( 'spam' ) # ('huevos de spam', 'spam', 'spam y jamón') "El spam genera spam y jamón" . partición ( 'X' ) # ('Spam huevos spam spam y jamón', "", "")
# Ejemplos en Perl 5 / Raku split /(spam)/ , 'El spam genera spam y jamón' , 2 ; # ('huevos de spam', 'spam', 'spam y jamón'); split /(X)/ , 'El spam genera spam y jamón' , 2 ; # ('El spam genera spam y jamón');
// Ejemplos en C# "effffff" . Reemplazar ( "f" , "saltar" ); // devuelve "ejumpjumpjumpjumpjumpjump" "bla" . Reemplazar ( "z" , "y" ); // devuelve "bla"
// Ejemplos en Java "effffff" . reemplazar ( "f" , "saltar" ); // devuelve "ejumpjumpjumpjumpjumpjump" "effffff" . reemplazarTodo ( "f*" , "saltar" ); // devuelve "saltar"
// Ejemplos en Raku "effffff" . subst ( "f" , "saltar" , : g ); # devuelve "ejumpjumpjumpjumpjumpjump" "bla" . subst ( "z" , "y" , : g ); # devuelve "bla"
' Ejemplos en Visual Basic Reemplazar ( "effffff" , "f" , "jump" ) ' devuelve "ejumpjumpjumpjumpjump" Reemplazar ( "bla" , "z" , "y" ) ' devuelve "bla"
# Ejemplos en Windows PowerShell "effffff" -replace "f" , "jump" # devuelve "ejumpjumpjumpjumpjumpjump" "effffff" -replace "f*" , "jump" # devuelve "ejump"
" Ejemplo en Smalltalk " 'hola' invertido " devuelve 'olleh' "
# Ejemplo en Perl 5 "hola" inverso # devuelve "olleh"
# Ejemplo en Raku "hola" . flip # devuelve "olleh"
# Ejemplo en Python "hola" [:: - 1 ] # devuelve "olleh"
; Ejemplo en Scheme ( use-modules ( srfi srfi-13 )) ( string-reverse "hola" ) ; devuelve "oleh"
; Ejemplos en Common Lisp ( buscar "e" "Hola compañero" : desde el final t ) ; devuelve 9 ( buscar "z" "palabra" : desde el final t ) ; devuelve NULO
// Ejemplos en C# "Hola amigo" . LastIndexOf ( "e" ); // devuelve 9 "Hola amigo" . LastIndexOf ( "e" , 4 ); // devuelve 1 "palabra" . ÚltimoIndexOf ( "z" ); // devuelve -1
# Ejemplos en Perl 5 rindex ( "Hola amigo" , "e" ); # devuelve 9 rindex ( "Hola amigo" , "e" , 4 ); # devuelve 1 rindex ( "palabra" , "z" ); # devuelve -1
# Ejemplos en Raku "Hola amigo" . rindex ( "e" ); # devuelve 9 "Hola amigo" . rindex ( "e" , 4 ); # devuelve 1 "palabra" . rindex ( 'z' ); # devuelve cero
' Ejemplos en Visual Basic InStrRev ( "Hola compañero" , "e" ) ' devuelve 10 InStrRev ( 5 , "Hola compañero" , "e" ) ' devuelve 2 InStrRev ( "palabra" , "z" ) ' devuelve 0
// Ejemplos en Java; extraer los 4 caracteres del extremo derecho String str = "CarDoor" ; cadena . subcadena ( cadena . longitud () - 4 ); // devuelve 'Puerta'
# Ejemplos en Raku "abcde" . substr (*- 3 ); # devuelve "cde" "abcde" . substr (*- 8 ); # error 'fuera de rango'
/* Ejemplos en Rexx */ right ( "abcde" , 3 ) /* devuelve "cde" */ right ( "abcde" , 8 ) /* devuelve "abcde" */ right ( "abcde" , 8 , "*" ) /* devuelve "***abcde" */
; Ejemplos en Scheme ( use-modules ( srfi srfi-13 )) ( string-take-right "abcde" , 3 ) ; devuelve "cde" ( cadena-tomar-derecha "abcde" , 8 ) ; error
' Ejemplos en Visual Basic Derecha ( "sandroguidi" , 3 ) ' devuelve "idi" Derecha ( "sandroguidi" , 100 ) ' devuelve "sandroguidi"
# Ejemplos en Python "El spam genera spam y jamón" . rpartition ( 'spam' ) ### ('El spam genera spam', 'spam', 'y ham') "El spam genera spam y jamón" . rpartition ( 'X' ) ### ("", "", 'Spam genera spam y jamón')
ver #subcadena
// Ejemplo en C# "abc,defgh,ijk" . Dividir ( ',' ); // {"abc", "defgh", "ijk"} "abc,defgh;ijk" . Dividir ( ',' , ';' ); // {"abc", "defgh", "ijk"}
% Ejemplo en cadena Erlang : tokens ( "abc;defgh;ijk" , ";" ). % ["abc", "defgh", "ijk"]
// Ejemplos en Java "abc,defgh,ijk" . dividir ( "," ); // {"abc", "defgh", "ijk"} "abc,defgh;ijk" . dividir ( ", |;" ); // {"abc", "defgh", "ijk"}
{ Ejemplo en Pascal } var lStrings : TStringList ; lStr : cadena ; comenzar lStrings : = TStringList . Crear ; lCuerdas . Delimitador := ',' ; lCuerdas . Texto delimitado := 'abc,defgh,ijk' ; lStr := lStrings . Cadenas [ 0 ] ; // 'abc' lStr := lStrings . Cadenas [ 1 ] ; // 'defgh' lStr := lStrings . Cadenas [ 2 ] ; // final 'ijk' ;
# Ejemplos en Perl 5 divididos ( /spam/ , 'El spam genera spam y jamón' ); # ('Huevos de spam ', '', ' y jamón') split ( /X/ , 'Huevos de spam spam y jamón' ); # ('El spam genera spam y jamón')
# Ejemplos en Raku 'Spam huevos spam spam y jamón' . dividir ( /spam/ ); # (Huevos de spam y jamón) split ( /X/ , 'Huevos de spam, spam y jamón' ); # (Spam huevos spam spam y jamón)
ver #Formato
ver #recortar
ver #Compare (resultado entero)
// Ejemplos en C# "abc" . Subcadena ( 1 , 1 ): // devuelve "b" "abc" . Subcadena ( 1 , 2 ); // devuelve "bc" "abc" . Subcadena ( 1 , 6 ); // error
;; Ejemplos en Common Lisp ( subseq "abc" 1 2 ) ; devuelve "b" ( subsiguiente "abc" 2 ) ; devuelve "c"
% Ejemplos en cadena Erlang : substr ( "abc" , 2 , 1 ). % devuelve la cadena "b" : substr ( "abc" , 2 ). % devuelve "bc"
# Ejemplos en Perl 5 substr ( "abc" , 1 , 1 ); # devuelve "b" substr ( "abc" , 1 ); # devuelve "bc"
# Ejemplos en Raku "abc" . substr ( 1 , 1 ); # devuelve "b" "abc" . substr ( 1 ); # devuelve "bc"
# Ejemplos en Python "abc" [ 1 : 2 ] # devuelve "b" "abc" [ 1 : 3 ] # devuelve "bc"
/* Ejemplos en Rexx */ substr ( "abc" , 2 , 1 ) /* devuelve "b" */ substr ( "abc" , 2 ) /* devuelve "bc" */ substr ( "abc" , 2 , 6 ) /* devuelve "bc " */ substr ( "abc" , 2 , 6 , "*" ) /* devuelve "bc****" */
// Ejemplo en C# "¿Wiki significa rápido?" . Arriba (); // "¿WIKI SIGNIFICA RÁPIDO?"
# Ejemplo en Perl 5 uc ( "¿Wiki significa rápido?" ); # "¿WIKI SIGNIFICA RÁPIDO?"
# Ejemplo en Raku uc ( "¿Wiki significa rápido?" ); # "¿WIKI SIGNIFICA RÁPIDO?" "¿Wiki significa rápido?" . uc ; # "¿WIKI SIGNIFICA RÁPIDO?"
/* Ejemplo en Rexx */ traducir ( "¿Wiki significa rápido?" ) /* "¿WIKI SIGNIFICA RÁPIDO?" */ /* Ejemplo #2 */
A = 'Este es un ejemplo.'
UPPER A /* "ESTO ES UN EJEMPLO." */ /* Ejemplo #3 */
A = 'superior usando la función de traducción.'
Traducir UPPER VAR A Z /* Z="SUPERIOR USANDO LA FUNCIÓN DE TRADUCCIÓN." */
; Ejemplo en Scheme ( use-modules ( srfi srfi-13 )) ( string-upcase "¿Wiki significa rápido?" ) ; "¿WIKI SIGNIFICA RÁPIDO?"
' Ejemplo en Visual Basic UCase ( "¿Wiki significa rápido?" ) ' "¿WIKI SIGNIFICA RÁPIDO?"
trim
o strip
se utiliza para eliminar espacios en blanco del principio, del final o tanto del principio como del final de una cadena.
Otros idiomas
En idiomas sin una función de recorte incorporada, suele ser sencillo crear una función personalizada que realice la misma tarea.
APL puede utilizar expresiones regulares directamente:
Recortar ← '^ +| +$' ⎕R ''
Alternativamente, un enfoque funcional que combina máscaras booleanas que filtran los espacios iniciales y finales:
Recortar ← { ⍵ /⍨ ( ∨ \ ∧ ∘ ⌽∨ \∘ ⌽ ) ' ' ≠ ⍵ }
O invierta y elimine los espacios iniciales, dos veces:
Recortar ← { ( ∨ \ ' ' ≠ ⍵ ) / ⍵ } ∘ ⌽ ⍣ 2
En AWK , se pueden usar expresiones regulares para recortar:
ltrim ( v ) = gsub ( /^[ \t]+/ , "" , v ) rtrim ( v ) = gsub ( /[ \t]+$/ , "" , v ) trim ( v ) = ltrim ( v ); recortar ( v )
o:
función ltrim ( s ) { sub ( /^[ \t]+/ , "" , s ); return s } función rtrim ( s ) { sub ( /[ \t]+$/ , "" , s ); return s } función trim ( s ) { return rtrim ( ltrim ( s )); }
No existe una función de recorte estándar en C o C++. La mayoría de las bibliotecas de cadenas disponibles [54] para C contienen código que implementa el recorte o funciones que facilitan significativamente una implementación eficiente. La función también se ha llamado a menudo EatWhitespace en algunas bibliotecas C no estándar.
En C, los programadores suelen combinar ltrim y rtrim para implementar trim:
#incluir <cadena.h> #incluir <ctipo.h> void rtrim ( char * str ) { char * s ; s = cadena + cadena ( cadena ); while ( -- s >= str ) { if ( ! isspace ( * s )) break ; * s = 0 ; } } void ltrim ( char * str ) { size_t n ; norte = 0 ; while ( str [ n ] != '\0' && isspace (( unsigned char ) str [ n ])) { n ++ ; } memmove ( cadena , cadena + n , cadena ( cadena ) - n + 1 ); } recorte vacío ( char * str ) { rtrim ( str ); ltrim ( cadena ); }
La biblioteca C++ de código abierto Boost tiene varias variantes de acabado, incluida una estándar: [55]
#include <boost/algorithm/string/trim.hpp> recortado = boost :: algoritmo :: trim_copy ( "cadena" );
Con la función de impulso nombrada simplemente, trim
la secuencia de entrada se modifica en el lugar y no devuelve ningún resultado.
Otra biblioteca C++ de código abierto , Qt , tiene varias variantes de acabado, incluida una estándar: [56]
#include <QString> recortado = s . recortado ();
El kernel de Linux también incluye una función strip, strstrip()
desde 2.6.18-rc1, que recorta la cadena "en su lugar". Desde 2.6.33-rc1, el kernel utiliza strim()
en lugar de strstrip()
para evitar falsas advertencias. [57]
Un algoritmo de recorte en Haskell :
importar Data.Char ( isSpace ) recortar :: Cadena -> Cadena recortar = f . f donde f = revertir . soltar mientras es espacio
puede interpretarse de la siguiente manera: f elimina el espacio en blanco anterior e invierte la cadena. Luego, f se aplica nuevamente a su propia salida. Tenga en cuenta que la firma tipográfica (la segunda línea) es opcional.
El algoritmo de recorte en J es una descripción funcional :
recortar =. #~ [: ( +./\ *. +./\. ) ' ' &~:
Es decir: filtrar ( #~
) para caracteres que no sean espacios ( ' '&~:
) entre los espacios iniciales ( +./\
) y ( *.
) finales ( +./\.
).
Hay una función de recorte incorporada en JavaScript 1.8.1 (Firefox 3.5 y posteriores) y el estándar ECMAScript 5. En versiones anteriores se puede agregar al prototipo del objeto String de la siguiente manera:
Cadena . prototipo . recortar = función () { devolver esto . reemplazar ( /^\s+/g , "" ). reemplazar ( /\s+$/g , "" ); };
Perl 5 no tiene función de recorte incorporada. Sin embargo, la funcionalidad se logra comúnmente mediante expresiones regulares .
Ejemplo:
$cadena =~ s/^\s+// ; # eliminar el espacio en blanco inicial $string =~ s/\s+$// ; # eliminar los espacios en blanco finales
o:
$cadena =~ s/^\s+|\s+$//g ; # eliminar los espacios en blanco iniciales y finales
Estos ejemplos modifican el valor de la variable original $string
.
También está disponible para Perl StripLTSpace desde String::Strip
CPAN .
Sin embargo, existen dos funciones que se usan comúnmente para eliminar espacios en blanco del final de las cadenas chomp
:chop
chop
elimina el último carácter de una cadena y lo devuelve.chomp
elimina los caracteres de nueva línea finales de una cadena, si están presentes. (Lo que constituye una nueva línea depende de $INPUT_RECORD_SEPARATOR).En Raku , el próximo lenguaje hermano de Perl, las cadenas tienen un trim
método.
Ejemplo:
$cadena = $cadena . recortar ; # eliminar los espacios en blanco iniciales y finales $string .= trim ; # la misma cosa
El comando Tcl string
tiene tres subcomandos relevantes trim
: trimright
y trimleft
. Para cada uno de esos comandos, se puede especificar un argumento adicional: una cadena que representa un conjunto de caracteres a eliminar; el valor predeterminado es espacio en blanco (espacio, tabulación, nueva línea, retorno de carro).
Ejemplo de recorte de vocales:
establecer cadena onomatopeya conjunto recortado [ cadena recortar $ cadena aeiou ] ; # el resultado es nomatop set r_trimmed [ string trimright $string aeiou ] ; # el resultado es onomatop set l_trimmed [ string trimleft $string aeiou ] ; # resultado es nomatopeya
XSLT incluye la función que elimina los espacios en blanco iniciales y finales, además de reemplazar cualquier secuencia de espacios en blanco (incluidos los saltos de línea) con un solo espacio.normalize-space(string)
Ejemplo:
<xsl: nombre de variable= 'recortado' > <xsl:valor-de selección= 'normalizar-espacio(cadena)' /> </xsl:variable>
XSLT 2.0 incluye expresiones regulares, lo que proporciona otro mecanismo para realizar el recorte de cadenas.
Otra técnica XSLT para recortar es utilizar la substring()
función XPath 2.0.
std::weak_ordering
): less
, equal
(igual que equivalent
) o greater
..TRUE.
o .FALSE.
. Estas funciones se basan en la secuencia de clasificación ASCII.Less
, Equal
o Greater
.==
los !=
métodos eq
se ne
implementan mediante el rasgo PartialEq, y los operadores <
,, y los métodos , se implementan >
mediante el rasgo PartialOrd.<=
>=
lt
gt
le
ge
string1
+
operador se implementa mediante el rasgo Agregar.startpos
es una extensión de IBM.formatstring
debe ser un literal fijo en el momento de la compilación para que tenga el tipo correcto.format
.&str
(referencia de cadena) se puede indexar mediante varios tipos de rangos, incluidos Range ( 0..n
), RangeFrom ( n..
) y RangeTo ( ..n
), porque todos implementan el rasgo SliceIndex como str
el tipo que se indexa. El método str::get es la forma más sencilla de indexar. Regresa Noneen los casos en los que la indexación entraría en pánico.transform
función existe en el std::
espacio de nombres. Debe incluir el <algorithm>
archivo de encabezado para usarlo. Las funciones tolower
y toupper
están en el espacio de nombres global, obtenido por el <ctype.h>
archivo de encabezado. Los nombres std::tolower
y std::toupper
están sobrecargados y no se pueden pasar std::transform
sin una conversión para resolver una función que sobrecarga la ambigüedad, por ejemplostd::transform(string.begin(), string.end(), result.begin(), (int (*)(int))std::tolower);
std::string
solamente, el resultado se almacena en una cadena result
que es al menos tan larga como string
y puede ser o no string
ella mismastartpos
puede ser negativo, lo que indica que debe comenzar ese número de lugares antes del final de la cadena.numChars
puede ser negativo, lo que indica que debe finalizar ese número de lugares antes del final de la cadena.startpos
puede ser negativo, utilice * - startpos para indicar que se debe iniciar ese número de lugares antes del final de la cadena.numChars
puede ser negativo, use * - numChars para indicar que finalice ese número de lugares antes del final de la cadena.endpos
puede ser negativo, lo que indica que debe finalizar ese número de lugares antes del final de la cadena.std::string
solamente, el resultado se almacena en una cadena resultado que es al menos tan larga como la cadena y puede ser o no la cadena misma&str
.