Vous êtes sur la page 1sur 2

Université Mouloud MAMMERI de Tizi-Ouzou Année universitaire : 2022/2023

Faculté de génie électrique et informatique 2ième année Licence-Informatique


Département d’informatique module : Théorie des langages

TP no 1
Chaînes de caractères en langage C

EXERCICE 1 :
1) Écrire un programme C qui lit un mot M et un nombre N et affiche N fois le mot lu.
2) Écrire un programme C qui lit un mot et affiche tous les préfixes non vides de ce mot.
À titre d’exemple les préfixes non vides du mot "MICRO" sont :
M
MI
MIC
MICR
MICRO

EXERCICE 2 :
1) Écrire un programme C qui lit un mot M et l’affiche verticalement.
À titre d’exemple si M est "JOUR" alors l’affichage sera :
J
O
U
R
2) Écrire un programme C qui lit une chaîne de caractères M et affiche chaque mot de M sur une ligne.
Le séparateur des mots est l’espace.
À titre d’exemple si M est "LE CIEL EST BLEU" alors l’affichage sera :
LE
CIEL
EST
BLEU

EXERCICE 3 :
On s’intéresse à la reconnaissance des mots bien parenthèsés :
• on accepte les mots comme (), ()(()) ou ((()())()) ;
• on rejette les mots comme )(, ()(() ou (()())).
Pour cela, la fonction de reconnaissance, qui parcourt le mot à tester caractère par caractère, utilise un
compteur (initialisé à 0) géré comme suit :
▪ si le caractère est une parenthèse ouvrante, le compteur est incrémenté ;
▪ si c'est une parenthèse fermante, le compteur est décrémenté.
Le mot est accepté si :
∙ la valeur du compteur n'est jamais 0 à la rencontre d'une fermante ; et si :
∙ la valeur compteur est 0 lorsque le mot a été parcouru jusqu’à la fin.
Écrire une fonction en C qui réalise cette tâche de reconnaissance, et la tester avec un programme.

- 1/2 -
Annexe : Quelques Fonctions de manipulation de chaînes en C

Lorsqu’on travaille avec les chaînes de caractères, il est conseillé d’inclure la bibliothèque :
<string.h>.
a) La fonction strlen : elle fournit la longueur de la chaine transmise en argument.
Exemple: strlen("bonjour"); /* retournera 7 */

b) Fonctions de copie:
• La fonction strcpy: elle recopie à l’adresse d’une première chaine, une seconde chaine de caractères
avec son caractère de fin de chaine (‘\0’).
Exemple : strcpy (ch1,""); /* la chaine se trouvant à l’adresse ch1 est maintenant
une chaine vide */
• La fonction strncpy: elle recopie aussi à l’adresse d’une première chaine, une seconde chaine de
caractères mais en limitant la copie à un nombre de caractères précis. Ce nombre est donné en argument.
Contrairement à strcpy, le caractère de fin de chaine (‘\0’) n’est pas rajouté automatiquement dans tous
les cas.
Exemple d’utilisation :
char ch [10];
strncpy (ch, "abc", 10); /* ch contiendra a, b et c mais aussi 7 caractères
nuls. */
strncpy (ch, "abc", 4); /* ch contiendra a, b, c et un caractère nul.*/

c) Fonctions de concaténation:
Les fonctions de concaténation permettent de mettre bout à bout deux chaines de caractères afin de n’en
former qu’une seule. Il existe en C deux fonctions pour réaliser cela : strcat et strncat.
Ces deux fonctions sont très similaires, la différence réside dans le fait que strncat possède un
troisième argument qui permet de limiter le nombre de caractères à concaténer (identiquement à
strncpy).
Exemple : char ch1[20] = "Bonjour", ch2[10]="Monsieur";
printf(" 1: %s|\n",ch1);
strcat(ch1, ch2);
printf(" 2: %s| 3: %s|\n",ch1,ch2);
on aura comme sortie :
1: Bonjour|
2: BonjourMonsieur| 3: Monsieur|

d) Fonctions de comparaison :
Les fonctions qui permettent de comparer des chaines de caractères selon leur ordre alphabétique (ordre
de la table ASCII) sont: strcmp et strncmp.
La fonction (retournant un entier) appliquée comme suit : strcmp(ch1,ch2) retourne :
- une valeur <0 si ch1 précède ch2 ;
- une valeur >0 si ch1 arrive après ch2 ;
- une valeur =0 si ch1=ch2.
Exemple :
strcmp("bonjour", "monsieur"); /* négatif */
strcmp("paris2", "paris10"); /* positif, 1 vient avant le 2 */
strcmp("bonjour", "bonjour"); /* nul */

- 2/2 -

Vous aimerez peut-être aussi