Manipulation de chaînes de caractères
A partir de maintenant, plus aucune valeur de test ne devra être codé en dur. Elles devront systématiquement être passées via la ligne de commande. Ex: ./mon_programe une_valeur une_autre_valeur etc
Attention aux Erreurs de segmentation !
Vos programmes ne devront jamais produire d’erreur de segmentation, même en cas de mauvaise utilisation (par exemple s’ils sont lancées sans paramètres)
Exercice 1
- Écrivez un programme qui obtient une chaîne de caractères par les paramètres
argc
et argv
du main()
et calcule sa longueur. Vous devez calculer la longueur de deux façons différentes : en utilisant la fonction dédiée de la bibliothèque C standard, puis en écrivant vous-même une fonction qui calcule la longueur d’une chaîne.
- Ajoutez la fonction qui compare la longueur de deux chaînes de caractères (
lengthcompare
).
- Écrivez une fonction qui prend une chaîne de caractères en paramètre et retourne le nombre de voyelles figurant dedans. Bien entendu, vous testerez votre fonction en comptant et en affichant le nombre de voyelles présentes dans tous les paramètres passés à votre programme sur la ligne de commande.
Exercice 2
- Écrivez une fonction qui teste si une chaîne de caractères donnée est un palindrome. Un palindrome est un mot qui se lit exactement de la même manière de gauche à droite et de droite à gauche (par exemple, “radar” ou “ressasser”).
- Écrivez la fonction qui teste si un caractère est une lettre de l’alphabet (cette fonction existe sous le nom
isalpha
dans ctype.h
).
- Écrivez la fonction qui transforme une lettre de l’alphabet en minuscule (cette fonction existe sous le nom
tolower
dans ctype.h
)
- Améliorer votre fonction palindrome pour qu’elle fonctionne avec des phrase, et des mots ne contenant pas que des lettres.
Exercice 3
- Écrivez une fonction
chaine_miroir()
qui inverse une chaîne de caractères passée en argument de votre fonction. Par exemple, le miroir de la chaîne aabc
est cbaa
.
- Proposez une solution pour que votre fonction n’écrase pas la chaîne d’entrée, et implémentez-la.
Exercice 4
- Écrire une fonction qui permet de faire la conversion d’un entier (
int
) en une chaîne de caractères représentant ce nombre en décimal (fonction inverse de atoi()
). Nous nous concentrerons dans un premier temps sur les entiers non signés.
- Étendez votre fonction pour prendre en compte les entiers signés.
- Bien évidemment, on écrira une fonction
main()
pour tester ces fonctions.
Remarque:
Pour réaliser votre programme vous pourrez utiliser la fonction chaine_miroir()
déjà développée dans l’exercice précédent.
Explication, algorithme et spoiler
Exercice 5 (bonus)
- Écrivez la fonction qui étant donnée une chaine de caractère contenant des nombres séparés par des espaces, rempli un tableau d’entier (un
atoi
pour tableaux). Quelle est la signature de la fonction.
- Généralisez pour que le séparateur soit ce qu’on veut (virgules espace etc.)
Exercice 6 (bonus)
- Écrivez une fonction qui prend un tableau d’entiers en paramètre et trie par ordre croissant les valeurs contenues dans ce tableau. Utilisez l’algorithme de tri par sélection qui à la première itération cherche la plus petite valeur du tableau et l’échange avec la valeur qui se trouve à la première position. Ensuite, il recherche la plus petite valeur dans le tableau non trié et l’échange avec la valeur qui se trouve à la deuxième position, et ainsi de suite (algorithme du tri par sélection ou son amélioration le tri à bulle)
- Écrivez une fonction qui prend en paramètre un tableau de chaînes de caractères et le trie par ordre lexicographique en utilisant le tri par sélection.