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
()
.