Etant donné le programme dont l’exécution est tracée ci dessous :
Saisissez une phrase : Les framboises sont perchees sur le tabouret de mon grand-pere. Vous avez saisi : Les framboises sont perchees sur le tabouret de mon grand-pere. Cette phrase commence par une majuscule. Cette phrase se termine par un point.
Pourriez-vous mettre au point un tel programme ?
Une chaîne de caractères est une suite de char
(caractères UNICODE). Le type utilisé pour déclarer une chaîne de
caractères est
string.
Une chaîne se déclare de la sorte :
| string <nom_chaine> = "valeur initiale"; |
Par exemple, on déclare une chaine c contenant "nabucodonosor" de la sorte :
| string c = "nabuchodonosor"; |
La concaténation de deux chaînes est la juxtaposition des caractères
qui les composent. L’opérateur utilisé pour ce faire est
+.
Par exemple :
| string a = "nabucho"; string b = "donosor"; string c = a + b; |
La longueur d’une chaîne
s (i.e. le nombre de caractères
qu’elle contient d’obtient avec l’attribut
.Length. Par
exemple,
| Console.WriteLine("La longueur de " + s + " est " + s.Length + "."); |
On extrait le i-ème caractère d’une chaîne
s avec
l’instruction
s[i] (attention les caractères sont indicés
à partir de 0). Par exemple,
| string s = "nabuchodonosor"; char c = s[1]; Console.WriteLine("Le deuxième caractère de " + s + " est " + c + "."); |
Nous sommes maintenant en mesure de coder l’exemple donné au début du cours :
| using System; namespace exempleCours { class MainClass { public static void Main (string[] args) { Console.WriteLine("Saisissez une phrase :"); string s = Console.ReadLine(); int n = s.Length; Console.Write("Cette phrase "); if (s[0] >= 'A' && s[0] <= 'Z') Console.Write("commence"); else Console.Write("ne commence pas"); Console.WriteLine(" par une majuscule."); Console.Write("Cette phrase "); if (s[n - 1] == '.') Console.Write("se termine"); else Console.Write("ne se termine pas"); Console.WriteLine(" par un point."); } } } |
On extrait de s une sous-chaîne de j caractères à partir du
caractère d’indice i en utilisant
s.Substring(i, j). Par
exemple,
| string s = "nabuchodonosor"; string s2 = s.Substring(4, 7); |
s2 contient alors chodono.
Le problème se posant avec les chaînes en c# est qu’elle ne sont pas
modifiables. Le type
StringBuilder permet de créer des
chaînes modifiables.
Pour utilisez des
StringBuilder, vous devez ajouter
using System.Text; au début de votre code source.
La syntaxe permettant de créer une chaîne vide est
| StringBuilder s = new StringBuilder(n); |
où
n est le nombre maximal de caractères que pourra
contenir la chaîne.
Vous avez aussi la possibilité de recopier une
string dans
une
StringBuilder en procédant de la sorte :
| StringBuilder sb = new StringBuilder(s); |
Vous pouvez insérer un caractère dans une
StringBuilder s en utilisant l’instruction
s.Insert(i, a). Les caractères se trouvant après l’indice
i dans s sont décalés d’une position vers la droite et a est
placé à l’indice i.
Vous pouvez remplacer le caractère d’indice i dans s par a avec
l’instruction
s[i] = a. Il faut bien entendu qu’il y ait
déjà un caractère à cet indice dans s, sinon le programme plante...
Pour effectuer des conversions entre
string et
StringBuilder, inutile d’effectuer des casts, ça ne
fonctionnera pas.
s de type
string vers
StringBuilder avec
new StringBuilder(s)
sb de type
StringBuilder vers
string avec
sb.ToString().