stringtranslate.com

Comparación de lenguajes de programación (funciones de cadena)

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 .

por ejemplo 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.

Funciones de cadena comunes (referencia en varios idiomas)

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.

CharAt

{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') 

Comparar (resultado entero)

# 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 )       

Comparar (resultado booleano basado en operadores relacionales)

% 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      

Concatenación

{ 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"

Contiene

¢ 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 "

Igualdad

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   


Encontrar

Ejemplos


encontrar personaje

// 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]

Formato

// 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" */       

Desigualdad

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

índice

ver #Encontrar

índice de

ver #Encontrar

instruir

ver #Encontrar

instruir

ver #rfind

unirse

// 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"       

ultimodexof

ver #rfind

izquierda

# 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"    


len

ver #longitud


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

localizar

ver #Encontrar


Minúsculas

// 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?"


medio

ver #subcadena


dividir

# 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');        


reemplazar

// 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"

contrarrestar

" 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"    

encontrar

; 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       


bien

// 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"    


partición

# 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')

rebanada

ver #subcadena


dividir

// 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)


sprintf

ver #Formato

banda

ver #recortar


strcmp

ver #Compare (resultado entero)


subcadena

// 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****" */            


Mayúsculas

// 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?" 

recortar

trimo stripse 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

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

AWK

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 ));  }

C/C++

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, trimla 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]

Haskell

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.

j

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 ( +./\.).

javascript

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 , "" ); };       

perla

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::StripCPAN .

Sin embargo, existen dos funciones que se usan comúnmente para eliminar espacios en blanco del final de las cadenas chomp:chop

En Raku , el próximo lenguaje hermano de Perl, las cadenas tienen un trimmétodo.

Ejemplo:

$cadena = $cadena . recortar ; # eliminar los espacios en blanco iniciales y finales $string .= trim ; # la misma cosa

tcl

El comando Tcl string tiene tres subcomandos relevantes trim: trimrighty 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

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.

Referencias

  1. ^ abcde el índice puede ser negativo, lo que luego indica el número de lugares antes del final de la cadena.
  2. ^ En Rust, el método str::chars itera sobre puntos de código y el método std::iter::Iterator::nth en iteradores devuelve el enésimo valor indexado a cero del iterador, o None.
  3. ^ el índice no puede ser negativo, use *-N donde N indica el número de lugares antes del final de la cadena.
  4. ^ En C++, el método operator<=> sobrecargado en una cadena devuelve un objeto std::strong_ordering (de lo contrario std::weak_ordering): less, equal(igual que equivalent) o greater.
  5. ^ devuelve MENOS, IGUAL o MAYOR
  6. ^ devuelve LT, EQ o GT
  7. ^ devuelve .TRUE.o .FALSE.. Estas funciones se basan en la secuencia de clasificación ASCII.
  8. ^ ab extensión de IBM.
  9. ^ En Rust, el método Ord::cmp en una cadena devuelve un Orden: Less, Equalo Greater.
  10. ^ abcdef En Rust, los operadores y ==los !=métodos eqse neimplementan mediante el rasgo PartialEq, y los operadores <,, y los métodos , se implementan >mediante el rasgo PartialOrd.<=>=ltgtlege
  11. ^ Los operadores utilizan la secuencia de clasificación predeterminada del compilador.
  12. ^ modifica , que debe tener suficiente espacio para almacenar el resultadostring1
  13. ^ En Rust, el +operador se implementa mediante el rasgo Agregar.
  14. ^ Consulte el método str::contains.
  15. ^ Consulte el método std::basic_string::contains.
  16. ^ ab startpos es una extensión de IBM.
  17. ^ ab Consulte el método str::find.
  18. ^ startpos es una extensión de IBM.
  19. ^ "escanear en Fortran Wiki". Fortranwiki.org. 2009-04-30 . Consultado el 18 de agosto de 2013 .
  20. ^ "verificar en Fortran Wiki". Fortranwiki.org. 2012-05-03 . Consultado el 18 de agosto de 2013 .
  21. ^ formatstring debe ser un literal fijo en el momento de la compilación para que tenga el tipo correcto.
  22. ^ Consulte std::format, que importa el preludio de Rust para que pueda usarse con el nombre format.
  23. ^ Vea el método slice::join.
  24. ^ si n es mayor que la longitud de la cadena, entonces en el modo de depuración se lanza ArrayRangeException, en el modo de lanzamiento, el comportamiento no está especificado .
  25. ^ si n es mayor que la longitud de la cadena, Java generará una excepción IndexOutOfBoundsException
  26. ^ ab si n es mayor que la longitud de la cadena, genera Invalid_argument
  27. ^ ab si n es mayor que la longitud de la cadena, arroja el mensaje "StringTake::take:"
  28. ^ abc En Rust, las cadenas se indexan en términos de desplazamientos de bytes y existe un pánico en tiempo de ejecución si el índice está fuera de los límites o si daría como resultado un UTF-8 no válido . Una &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 strel 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.
  29. ^ Ruby carece de soporte Unicode
  30. ^ Consulte el método str::len.
  31. ^ En Rust, el método str::chars itera sobre puntos de código y el método std::iter::Iterator::count en iteradores consume el iterador y devuelve el número total de elementos en el iterador.
  32. ^ opera en un carácter
  33. ^ ab La transformfunción existe en el std::espacio de nombres. Debe incluir el <algorithm>archivo de encabezado para usarlo. Las funciones tolowery toupperestán en el espacio de nombres global, obtenido por el <ctype.h>archivo de encabezado. Los nombres std::tolowery std::toupperestán sobrecargados y no se pueden pasar std::transformsin 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);
  34. ^ std::string solamente, el resultado se almacena en una cadena resultque es al menos tan larga como stringy puede ser o no stringella misma
  35. ^ ab solo caracteres ASCII ya que Ruby carece de soporte Unicode
  36. ^ Consulte el método str::to_lowercase.
  37. ^ Consulte el método str::replace.
  38. ^ abcde La cadena "buscar" en esta construcción se interpreta como una expresión regular . Ciertos caracteres tienen un significado especial en las expresiones regulares. Si desea encontrar una cadena literalmente, debe citar los caracteres especiales.
  39. ^ el tercer parámetro no es estándar
  40. ^ En Rust, el método str::chars itera sobre puntos de código, el método std::iter::Iterator::rev en iteradores reversibles (std::iter::DoubleEndedIterator) crea un iterador invertido y std::iter El método ::Iterator::collect consume el iterador y crea una colección (que aquí se especifica como una cadena con la sintaxis turbofish) a partir de los elementos del iterador.
  41. ^ Consulte el método str::rfind.
  42. ^ "ES5 anotado". Es5.github.com. Archivado desde el original el 28 de enero de 2013 . Consultado el 18 de agosto de 2013 .
  43. ^ si n es mayor que la longitud de la cadena, entonces en el modo de depuración se lanza ArrayRangeException y se produce un comportamiento no especificado en el modo de lanzamiento
  44. ^ Consulte los métodos str::split y str::rsplit.
  45. ^ abcdefg startpospuede ser negativo, lo que indica que debe comenzar ese número de lugares antes del final de la cadena.
  46. ^ ab numCharspuede ser negativo, lo que indica que debe finalizar ese número de lugares antes del final de la cadena.
  47. ^ nostartpos puede ser negativo, utilice * - startpos para indicar que se debe iniciar ese número de lugares antes del final de la cadena.
  48. ^ nonumChars puede ser negativo, use * - numChars para indicar que finalice ese número de lugares antes del final de la cadena.
  49. ^ abcde endpospuede ser negativo, lo que indica que debe finalizar ese número de lugares antes del final de la cadena.
  50. ^ 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
  51. ^ En Rust, el método str::to_uppercase devuelve una cadena recién asignada con los caracteres en minúscula cambiados a mayúsculas siguiendo las reglas de Unicode.
  52. ^ En Rust, el método str::trim devuelve una referencia al original &str.
  53. ^ "Recortar - GNU Pascal priručnik". Gnu-pascal.de . Consultado el 24 de agosto de 2013 .
  54. ^ "Comparación de bibliotecas de cadenas". Y.org . Consultado el 24 de agosto de 2013 .
  55. ^ "Uso - 1.54.0". Boost.org. 22 de mayo de 2013 . Consultado el 24 de agosto de 2013 .
  56. ^ [1] Archivado el 2 de agosto de 2009 en Wayback Machine .
  57. ^ danka entre hombres. "sprezzos-kernel-packaging/changelog en master · dankamongmen/sprezzos-kernel-packaging · GitHub". Github.com . Consultado el 29 de mayo de 2016 .