Wikia

D Programming

Osservati speciali Ultime modifiche

Le Stringhe

Indice

Introduzione Modifica

Manipolare le stringhe in D è molto semplice e veloce, ora inizieremo a lavorare con i moduli della libreria standard Phobos, piu precisamente col modulo: std.string.

Ricordo che una stringa in D è un semplice char[], avevo detto che string era un alias, ma...cos'è un alias???

In D, alias è una parola chiave e serve per dare un sinonimo ad un tipo, proprio com'è stato fatto per string:

  alias char[] string;
 IMPORTANTE!!!
 In D le stringe NON sono null terminating (vuol dire che a differenza del C, la fine non è segnata
 con un '\0')

Dichiarare e assegnare una stringa Modifica

Niente di più semplice, sono delle semplici variabili:

import std.stdio;
 
int main(string[] args)
{
  //MODO 1
  string miaStringa1 = "Stringa Uno in D";
 
  //MODO 2
  char[] miaStringa2 = "Stringa Due in D";
 
  return 0;
}

Se volete utilizzare string o char[] non fa differenza sono due modi diversi per dire la stessa cosa

Operazioni con le stringhe Modifica

In realtà c'è veramente poco da scrivere, e sorgenti si spiegano da soli.

Concatenare due stringhe Modifica

 L'operatore di concatenamento del D
 Forse come avrete notato il D non usa il classico '+' per concatenare, ma bensì usa la tilde (~),
 il motivo?? E' molto semplice, l'operatore '+' vuol dire somma qualcosa, e per evitare
 l'ambiguità concatenamento/somma, è stata introdotta la tilde, per cui ogni volta che si vuole
 contatenare array, stringhe e quant'altro è importante ricordarsi di non usare il +

L'esempio per concatenare due stringhe è molto semplice:

int main(string[] args)
{
  string str1 = "Linguaggio ";
  string str2 = "di programmazione D";
  string str3 = str1 ~ str2;
 
  writefln(str3);
  return 0;
}
 Output:
 Linguaggio di programmazione D

Splittare una stringa Modifica

Per splittare una stringa in D esiste il metodo split(), per splittare una stringa s'intende dividere la stringa in due o più sotto-stringhe, separandola in base ad un simbolo, per rendere più chiara l'idea ecco un esempio:

import std.stdio;  //Modulo principale di Phobos
import std.string; //Modulo per le operazioni con le stringhe
 
int main(string[] args)
{
  //Dichiaro una stringa
  string str = "Stringa1|Stringa2";
 
  //Splittiamo la stringa
  string[] splitted = std.string.split(str, "|");
 
  //Facciamo apparire le stringhe splittate sullo schermo
  writefln("1) %s", splitted[0]);
  writefln("2) %s", splitted[1]);
 
  return 0;
}
 Output:
 1) Stringa1
 2) Stringa2
 NOTA BENE
 Se non si passa il token al metodo split, la funzione intende che volete splittare la stringa con
 lo spazio

Trovare la prima occorrenza di una lettera Modifica

Per trovare la prima occorrenza di una lettera si può fare in due modi:

  • Cercando dall'inizio alla fine
  • Cercando dalla fine all'inizio

Esistono 4 funzioni per cercare nelle stringhe:

  • find(): cerca la prima occorrenza di una lettera dall'inizio verso la fine in modalità case sensitive
  • ifind(): cerca la prima occorrenza di una lettera dall'inizio verso la fine in modalità NON case sensitive
  • rfind(): cerca la prima occorrenza di una lettera dalla fine verso l'inizio in modalità case sensitive
  • find(): cerca la prima occorrenza di una lettera dalla fine verso l'inizio in modalità NON case sensitive
import std.stdio;
import std.string;
 
int main(string[] args)
{
  string str = "Stringa in D";
 
  //Cerco la lettera partendo dall'inizio
  int index = std.string.find(str, "i");
  writefln("1) %d", index);
 
  //Cerco la lettera partendo dalla fine
  index = std.string.rfind(str, "i");
  writefln("2) %d", index);
 
  return 0;
}
 Output:
 1) 3
 2) 8

Estrarre sottoinsiemi di stringhe (substring o slicing) Modifica

Come possiamo estrarre sottostringhe da una stringa?? E' molto semplice, ricordate che in D le stringhe non sono altro che array di caratteri???

Bene, basterà trattarli come tali:

import std.stdio;
import std.string;
 
int main(string[] args)
{
  string str = "Stringa di prova";
  int index = std.string.find(str, "p");  //Cerco la prima occorrenza della lettera 'p'
 
  string subStr = str[index..str.length]; //Ricavo il sottoinsieme (da 'p' fino alla fine)
  writefln(subStr);
 
  return 0;
}
 Output:
 prova

Formattare una stringa Modifica

Per formattare una stringa in D esiste il classico metodo format():

import std.stdio;
import std.string;
 
int main(string[] args)
{
  int num = 175;
 
  //Formattiamo la stringa
  string str = std.string.format("%08x", num);	
  writefln(str);
  return 0;
}
 Output:
 000000af

Stringhe null-terminating Modifica

All'inizio del capitolo ho scritto: Il D non utilizza le stringhe null-terminating ma...se volessimo scrivere ad esempio un plugin in D per un programma, utilizzare delle API che richiedono nei parametri delle stringhe o quant'altro, come potremmo utilizzare le stringhe??? E' molto semplice, esistono 2 funzioni molto importanti:

  • std.string.toString(): converte una stringa null-terminating in una stringa D (può anche convertire i numeri in stringa)
  • std.string.toStringz(): converte una stringa D in una stringa null-terminating
import std.stdio;
import std.string;
 
int main(string[] args)
{
  string str = "Stringa D";
 
  //Convertiamo 'str' in una stringa null-terminating
  char* nullTermStr = std.string.toStringz(str);
  return 0;   
}

Pagine su D Programming

Crea una pagina
25pagine in
questa wiki
Advertisement | Your ad here

Latest Photos

Carica un'immagine
10immagini in questa wiki
Vedi altre >

Attività recenti della Wiki

Vedi >

Nella rete di Wikia

Wiki a caso