Grosseur d'un tableau variable

Fermé
einsteinqc Messages postés 1 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 1 juin 2016 - 1 juin 2016 à 03:00
Franck7511 Messages postés 14296 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 10 août 2017 - 1 juin 2016 à 19:37
Bonjour en premier lieu, je dois vous dire que je suis débutant en programmation et c++.
J'ai regarder sur plein de forum donc celui-ci et je ne trouve pas comment faire .. je vous expliques. Je dois faire un programme que l'on entre un mot de 10 lettres minimums et après dans un autre variable, une lettre. et le résultat est le mot entrer et i met la lettre choisi en majuscule. J'aimerais que le 20, dans motDixCaract[20] et for (int x=0; x< 20; x++) soit variable a la grandeur du mot entré +1.

Exemple: J'entre le mot: maison
La lettre choisi est a
Le résultat est: mAison

voila le code que j'ai fais, mais il y a des bouts qui sont OK, mais d'autre Ouuffff !
Merci...

#include <iostream>
#include <string.h>

using namespace std;
int main()
{

//demande a l'usager de saisir un mots de + de 10 caracteres et le stock dans la variable motDixCaract

char motDixCaract[20];
char lettreRech;
cout << "entrer un mots contenant plus de 10 caracteres svp: "<<endl;
cin >> motDixCaract;
cout << "entrer la lettre qui est recherche: "<<endl;
cin >> lettreRech;


for (int x=0; x< 20; x++)
{
if (motDixCaract[x] == lettreRech)
cout<< char(motDixCaract[x] -32);
else
cout<< char(motDixCaract[x]);
}

1 réponse

Franck7511 Messages postés 14296 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 10 août 2017 1 121
Modifié par Franck7511 le 1/06/2016 à 19:40
1/ Evite le 'using namespace std'
2/ Pourquoi "#include <string.h>" ? C'est pas du C++ ça, et c'est pas nécessaire ici.
3/ Evite les tableaux de char, privilégie std::string qui est inclus en C++. (#include <string>)
4/ Où tu utilises la propriété "plus de 10 caractères" dans ton programme ?

Bon, si tu veux garder le tableau de char, tu peux allouer un grand tableau de taille fixe (ça reste une mauvaise solution) et itérer non plus jusqu'à 20 mais strlen(motDixCaract).

Pourquoi écrire caractère par caractère sinon ? Autant juste modifier le caractère au sein de ta boucle :
if (motDixCaract[x] == lettreRech) // Attention lettreRech doit être minuscule !
    motDixCaract[x] = std::toupper(lettreRech); 

Et tu print motDixCaract.

La bonne technique est celle d'utiliser std::string, et dans ce cas :
std::for_each (motDixCaract.begin(), motDixCaract.end(), [&](char& c) { 
    if (c == lettreRech) // Attention lettreRech doit être minuscule !
        c = std::toupper(lettreRech);
});
std::cout << motDixCaract << std::endl;
0