Programmazione D - Stringhe

D fornisce i seguenti due tipi di rappresentazioni di stringhe:

  • Matrice di caratteri
  • Stringa della lingua principale

Character Array

Possiamo rappresentare l'array di caratteri in una delle due forme come mostrato di seguito. Il primo modulo fornisce direttamente la dimensione e il secondo modulo utilizza il metodo dup che crea una copia scrivibile della stringa "Good morning".

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

Esempio

Ecco un semplice esempio che utilizza le forme di matrice di caratteri semplici sopra.

import std.stdio;

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

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

Quando il codice precedente viene compilato ed eseguito, produce un risultato come segue:

Hello all 
Good morning

Stringa del linguaggio di base

Le stringhe sono integrate nel linguaggio principale di D. Queste stringhe sono interoperabili con l'array di caratteri mostrato sopra. L'esempio seguente mostra una semplice rappresentazione di stringa.

string greeting1 = "Hello all";

Esempio

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

Quando il codice precedente viene compilato ed eseguito, produce un risultato come segue:

Hello all 
Good morning 
Hello all

Concatenazione di stringhe

La concatenazione di stringhe nella programmazione D utilizza il simbolo tilde (~).

Esempio

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

Quando il codice precedente viene compilato ed eseguito, produce un risultato come segue:

Good morning 
Good morning

Lunghezza della stringa

La lunghezza della stringa in byte può essere recuperata con l'aiuto della funzione di lunghezza.

Esempio

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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

Confronto tra stringhe

Il confronto delle stringhe è abbastanza semplice nella programmazione D. È possibile utilizzare gli operatori ==, <e> per i confronti tra stringhe.

Esempio

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

Quando il codice precedente viene compilato ed eseguito, produce un risultato come segue:

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

Sostituzione delle stringhe

Possiamo sostituire le stringhe usando la stringa [].

Esempio

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

Quando il codice precedente viene compilato ed eseguito, produce un risultato come segue:

hello sample

Metodi di indice

I metodi di indicizzazione per la posizione di una sottostringa in una stringa inclusi indexOf e lastIndexOf sono spiegati nell'esempio seguente.

Esempio

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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

Casi di manipolazione

I metodi utilizzati per cambiare i casi sono mostrati nel seguente esempio.

Esempio

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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

Caratteri restrittivi

La restrizione dei caratteri nelle stringhe viene mostrata nell'esempio seguente.

Esempio

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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