Programación D - Cuerdas

D proporciona los siguientes dos tipos de representaciones de cadenas:

  • Matriz de caracteres
  • Cadena de idioma principal

Matriz de caracteres

Podemos representar la matriz de caracteres en una de las dos formas que se muestran a continuación. El primer formulario proporciona el tamaño directamente y el segundo formulario utiliza el método dup que crea una copia escribible de la cadena "Buenos días".

char[9]  greeting1 = "Hello all"; 
char[] greeting2 = "Good morning".dup;

Ejemplo

Aquí hay un ejemplo simple usando las formas simples de matriz de caracteres anteriores.

import std.stdio;

void main(string[] args) { 
   char[9] greeting1 = "Hello all"; 
   writefln("%s",greeting1); 

   char[] greeting2 = "Good morning".dup; 
   writefln("%s",greeting2); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Hello all 
Good morning

Cadena de idioma principal

Las cadenas están integradas en el lenguaje principal de D. Estas cadenas son interoperables con la matriz de caracteres que se muestra arriba. El siguiente ejemplo muestra una representación de cadena simple.

string greeting1 = "Hello all";

Ejemplo

import std.stdio;

void main(string[] args) { 
   string greeting1 = "Hello all"; 
   writefln("%s",greeting1);  
   
   char[] greeting2 = "Good morning".dup; 
   writefln("%s",greeting2);  
   
   string greeting3 = greeting1; 
   writefln("%s",greeting3); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Hello all 
Good morning 
Hello all

Concatenación de cadenas

La concatenación de cadenas en la programación D usa el símbolo de tilde (~).

Ejemplo

import std.stdio;

void main(string[] args) { 
   string greeting1 = "Good"; 
   char[] greeting2 = "morning".dup; 
   
   char[] greeting3 = greeting1~" "~greeting2; 
   writefln("%s",greeting3); 
   
   string greeting4 = "morning"; 
   string greeting5 = greeting1~" "~greeting4; 
   writefln("%s",greeting5); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Good morning 
Good morning

Longitud de la cadena

La longitud de la cadena en bytes se puede recuperar con la ayuda de la función de longitud.

Ejemplo

import std.stdio;  

void main(string[] args) { 
   string greeting1 = "Good"; 
   writefln("Length of string greeting1 is %d",greeting1.length); 
   
   char[] greeting2 = "morning".dup;        
   writefln("Length of string greeting2 is %d",greeting2.length); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Length of string greeting1 is 4 
Length of string greeting2 is 7

Comparación de cadenas

La comparación de cadenas es bastante fácil en la programación D. Puede utilizar los operadores ==, <y> para comparaciones de cadenas.

Ejemplo

import std.stdio; 
 
void main() { 
   string s1 = "Hello"; 
   string s2 = "World";
   string s3 = "World";
   
   if (s2 == s3) { 
      writeln("s2: ",s2," and S3: ",s3, "  are the same!"); 
   }
   
   if (s1 < s2) { 
      writeln("'", s1, "' comes before '", s2, "'."); 
   } else { 
      writeln("'", s2, "' comes before '", s1, "'."); 
   }
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

s2: World and S3: World are the same! 
'Hello' comes before 'World'.

Reemplazo de cuerdas

Podemos reemplazar cadenas usando la cadena [].

Ejemplo

import std.stdio; 
import std.string; 
 
void main() {
   char[] s1 = "hello world ".dup; 
   char[] s2 = "sample".dup;
   
   s1[6..12] = s2[0..6]; 
   writeln(s1);
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

hello sample

Métodos de índice

Los métodos de índice para la ubicación de una subcadena en una cadena, incluidos indexOf y lastIndexOf, se explican en el siguiente ejemplo.

Ejemplo

import std.stdio;
import std.string;

void main() { 
   char[] s1 = "hello World ".dup; 
    
   writeln("indexOf of llo in hello is ",std.string.indexOf(s1,"llo")); 
   writeln(s1); 
   writeln("lastIndexOf of O in hello is " ,std.string.lastIndexOf(s1,"O",CaseSensitive.no));
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

indexOf.of llo in hello is 2 
hello World  
lastIndexOf of O in hello is 7

Manejo de casos

Los métodos utilizados para cambiar los casos se muestran en el siguiente ejemplo.

Ejemplo

import std.stdio;
import std.string;

void main() { 
   char[] s1 = "hello World ".dup; 
   writeln("Capitalized string of s1 is ",capitalize(s1)); 
    
   writeln("Uppercase string of s1 is ",toUpper(s1)); 
    
   writeln("Lowercase string of s1 is ",toLower(s1));   
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Capitalized string of s1 is Hello world  
Uppercase string of s1 is HELLO WORLD  
Lowercase string of s1 is hello world

Restricción de caracteres

La restricción de caracteres en cadenas se muestra en el siguiente ejemplo.

Ejemplo

import std.stdio;
import std.string;

void main() { 
   string s = "H123Hello1";  
   
   string result = munch(s, "0123456789H"); 
   writeln("Restrict trailing characters:",result);  
   
   result = squeeze(s, "0123456789H"); 
   writeln("Restrict leading characters:",result); 
   
   s = "  Hello World  "; 
   writeln("Stripping leading and trailing whitespace:",strip(s)); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Restrict trailing characters:H123H 
Restrict leading characters:ello1 
Stripping leading and trailing whitespace:Hello World