title: Manipulation de chaînes de caractères number: 2 —

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

Exercice 1

  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.
  2. Ajoutez la fonction qui compare la longueur de deux chaînes de caractères (lengthcompare).
  3. É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

  1. É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”).
  2. É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).
  3. Écrivez la fonction qui transforme une lettre de l’alphabet en minuscule (cette fonction existe sous le nom tolower dans ctype.h)
  4. Améliorer votre fonction palindrome pour qu’elle fonctionne avec des phrase, et des mots ne contenant pas que des lettres.

Exercice 3

  1. É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.
  2. Proposez une solution pour que votre fonction n’écrase pas la chaîne d’entrée, et implémentez-la.

Exercice 4

  1. É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.
  2. Étendez votre fonction pour prendre en compte les entiers signés.
  3. Bien évidemment, on écrira une fonction main() pour tester ces fonctions.

Explication, algorithme et spoiler

Exercice 5 (bonus)

  1. É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.
  2. Généralisez pour que le séparateur soit ce qu’on veut (virgules espace etc.)

Exercice 6 (bonus)

  1. É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)
  2. É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.