Inversement chaine de caractères dans un tableau

Inversement chaine de caractères dans un tableau - C++ - Programmation

Marsh Posté le 06-01-2019 à 15:14:54    

Bonjour,
Me voici bloqué dans mon programme et je souhaiterai avoir une piste qui pourrai me débloquer.
Le but étant d'inverser une chaine de caractères, entrée au clavier, depuis un tableau. Mais je ne parviens pas à trouver une solution pour inverser ma chaine.
Je ne compte pas passer par des fonctions car le prof nous interdit de le faire, merci d'avance aux futures réponses !
 
Le code :
 
#include <iostream>
using namespace std;
 
int main()
{
    int i (-1);
    char sMaChaine[254+1];
    char dMaChaine[254+1];
    cout << "Entrez votre chaine de caracteres :"<<endl;
    cin >> sMaChaine;
    do
    {
 
        i=i+1;
        dMaChaine[i] = sMaChaine[i];
 
    }
    while (!(sMaChaine[i]=='\0'));
     
     
 
    cout<<dMaChaine<<endl;
 
    return 0;
}

Reply

Marsh Posté le 06-01-2019 à 15:14:54   

Reply

Marsh Posté le 06-01-2019 à 15:30:08    

tortan v2 a écrit :

Je ne compte pas passer par des fonctions car le prof nous interdit de le faire

Quoi? Si vous voulez vraiment faire du C++ (avec intonation sur le ++) il faut justement regarder tout ce que proposent les bibliothèques standards et utiliser au max ces fonctions.

 

Bon, sinon ton truc est simple: Deux tableaux, deux variables indexes. Une variable de 0 à N pour le premier tableau et une autre de N à 0 pour le second tableau. Une boucle for() (ou while() mais par convention pour ce genre de trucs c'est du for()) et on recopie caractère par caractère. Ne pas oublier le '\0'. Après on peut optimiser pour utiliser une seule variable.


Message édité par rat de combat le 06-01-2019 à 15:30:47
Reply

Marsh Posté le 06-01-2019 à 15:38:23    

Je sais bien mais nous en sommes que au début, les fonctions arriveront après avoir compris les bases du C++. D'accord je comprends, donc il suffit que je fasse une boucle for qui écrirait chaque char du tableau dans le sens inverse mais comment dire au programme ou s'arrêter si le '\0' n'est plus au même endroit ?

Reply

Marsh Posté le 06-01-2019 à 15:54:56    

Soit tu fais une boucle for() en déterminant d'abord la longeur de la chaîne avec strlen(), soit tu fais une boucle while(tab[i]!='\0').

Reply

Marsh Posté le 06-01-2019 à 17:00:42    

OK j'ai déterminé la taille de ma chaine mais je bloque sur la structure du for...  
 
code :
 
taille = strlen(dMaChaine);
 
     for(i=taille; i<taille; i--)
    {
        dMaChaine[i]=dMaChaine[taille];
    }
 
Qu'est ce qui n'est pas bon ?

Reply

Marsh Posté le 06-01-2019 à 17:07:32    

L'idée est là mais c'est pas encore ça. Déjà il te faut une deuxième chaîne dans laquelle tu copies la première (à l'envers). Ensuite il te faut deux indexes qui vont en sens inverse, ou alors un indexe et une soustraction avec taille. Essaye de faire l'algo sur un bout de papier avec des mots et ensuite tu traduis en C(++).

Reply

Marsh Posté le 06-01-2019 à 17:23:37    

Pour l'instant voici à quoi ressemble mon programme :
 
#include <iostream>
#include <string.h>
using namespace std;
 
int main()
{
    int i (-1);
    int taille (0);
    char sMaChaine[254+1];
    char dMaChaine[254+1];
    cout << "Entrez votre chaine de caracteres :"<<endl;
    cin >> sMaChaine;
    do
    {
 
        i=i+1;
        dMaChaine[i] = sMaChaine[i];
 
    }
    while (!(sMaChaine[i]=='\0'));
 
    taille = strlen(dMaChaine);
 
 
     for(i=taille; i<taille; i--)
    {
        dMaChaine[i]=dMaChaine[taille];
    }
 
    cout<<dMaChaine<<endl;
    return 0;
}
 
Le problème est que je ne sais pas comment réécrire dans un autre tableau ma chaine de caractères à l'envers, faire un algorithme à la main ne me servira à rien ^^

Reply

Marsh Posté le 06-01-2019 à 17:30:40    

tortan v2 a écrit :

faire un algorithme à la main ne me servira à rien ^^

C'est pourtant comme ça que ça marche. Il faut d'abord créer l'algo et ensuite le code, pas l'inverse. C'est une chose que beaucoup de gens font dans le mauvais sens, ils pensent qu'on peut saisir directement le code. Pourtant ce n'est que le 2eme ou 3eme étape.
 
Comme je disais: Tu prends un tableau A avec ta chaîne. Tu prends un tableau B vide. Tu prends un indexe i que tu fais défiler sur ton tableau (chaîne de caractères = tableau de char, j'interchange les deux mots) de 0 à strlen(). Tu lis chaque char et tu le stockes dans ton tableau B à la position taille-i. Il faut aussi s'assurer que le '\0' est bien présent / le mettre dans le tableau B.
 
Je peux difficilement en dire plus sans te faire le code, ce que je ne veux pas faire car c'est toi qui veux apprendre.

Reply

Marsh Posté le 07-01-2019 à 17:20:33    

y a presque 20 ans
mon prof nous disait en rentrant en cours
"vous allez pisser de l'algo encore aujourd'hui"
à l'époque cela m'avait bien aidé après j'ai oublié
mais maintenant je regrette.....

Reply

Marsh Posté le 16-02-2019 à 10:21:18    

Il faut que tu te fasse un dessin avec les 2 chaines et représente ce qui se passe...
 
Par ex si dans l'ancienne chaine le caractère est à la position x et la taille de la chaine est taille, à quelle position doit être le caractère correspondant dans la chaine inversée ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed