Quelques éléments nouveaux en C++
// CORRIGÉ : iostream remplace stdio.h pour les entrées/sorties #include <iostream> // CORRIGÉ : string fournit la classe std::string pour les chaînes de caractères #include <string> // CORRIGÉ : les caractères // introduisent un commentaire jusqu'à la fin de la ligne // ceci est une fonction qui additionne deux entiers // CORRIGÉ : le paramètre c est passé par référence void addition(int a, int b, int & c) { c=a+b; } // ceci est une fonction qui additionne deux flottants // CORRIGÉ : surcharge de fonction : même nom, mais signature différente void addition(float a, float b, float & c) { c=a+b; } int main(int argc, char** argv) { // CORRIGÉ : déclaration de i dans la boucle for(int i=0; i<10; ++i) { int x1; addition(i,i,x1); // CORRIGÉ : nouvelle syntaxe, std::cout à la place de printf // CORRIGÉ : notion d'espace de nom (similaire au package Java) avec std:: std::cout << "x1 : " << x1 << "n"; float x2; addition(i,i,x2); std::cout << "x2 : " << x2 << "n"; } // CORRIGÉ : utilisation de la classe std::string std::string nom; std::cout << "Entrez votre nom : "; // CORRIGÉ : nouvelle syntaxe, std::cin à la place de scanf std::cin >> nom; std::cout << "Bonjour " << nom << "n"; }
Tableau de chaînes de caractères
#include <iostream> #include <string> string* redimensionner(std::string* tableau, int ancienneTaille, int nouvelleTaille) { std::string* nouveau=new string[nouvelleTaille]; for(int i=0;i<ancienneTaille;i++) { nouveau[i]=tableau[i]; } if(tableau) { delete[] tableau; } return nouveau; } void afficher(std::string const * const tableau,int taille) { for(int i=0;i<taille;++i) { std::cout << tableau[i] << "n"; } } int main() { int taille=0; std::string* tableau=NULL; bool fini = false; while(!fini) { std::string saisie; std::cout << "saisisez une chaine: "; std::cin >> saisie; if(saisie=="fin") { fini = true; } else { tableau=redimensionner(tableau,taille,taille+1); taille++; tableau[taille-1]=saisie; } } afficher(tableau,taille); return EXIT_SUCCESS; }
Les instructions
if(saisie=="fin") { fini = true; }
utilisent la surcharge de l'opérateur de comparaison ==, afin de pouvoir comparer des objets de type std::string. La gestion du tableau est problématique, puisqu'il doit être agrandi manuellement à chaque insertion.
Tableau dynamique de chaînes
#include <iostream> #include <string> #include <vector> void afficher(std::vector<std::string> const & tableau) { for(int i=0; i<tableau.size(); ++i) { std::cout << tableau[i] << "n"; } } int main() { std::vector<std::string> tableau; bool fini = false; while(!fini) { std::string saisie; std::cout << "Saisissez une chaine : "; std::cin >> saisie; if(saisie == "fin") { fini = true; } else { tableau.push_back(saisie); } } afficher(tableau); return EXIT_SUCCESS; }
Tri de chaînes de caractères
#include <iostream> #include <string> #include <vector> std::vector<std::string> saisir() { std::vector<std::string> tableau; bool fini = false; while(!fini) { std::string saisie; std::cout << "Saisissez une chaine : "; std::cin >> saisie; if(saisie == "fin") { fini = true; } else { tableau.push_back(saisie); } } return tableau; } void afficher(std::vector<std::string> const & tableau) { for(int i=0; i<tableau.size(); ++i) { std::cout << tableau[i] << "n"; } } void echange(std::string & s1, std::string & s2) { std::string temp = s1; s1 = s2; s2 = temp; } int rechercheMinimum(std::vector<std::string> const & tableau, int debut) { int resultat = debut; for(int i=debut+1; i<tableau.size(); ++i) { if(tableau[i]<tableau[resultat]) { resultat = i; } } return resultat; } void triChaines(std::vector<std::string> & tableau) { for(int i=0; i<tableau.size(); ++i) { int min = rechercheMinimum(tableau, i); echange(tableau[i], tableau[min]); } } int main() { std::vector<std::string> tableau=saisir(); afficher(tableau); triChaines(tableau); afficher(tableau); return EXIT_SUCCESS; }