Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1872 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Inversement chaine de caractères dans un tableau

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Inversement chaine de caractères dans un tableau

n°2327272
tortan v2
Sanglier
Posté le 06-01-2019 à 15:14:54  profilanswer
 

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;
}

mood
Publicité
Posté le 06-01-2019 à 15:14:54  profilanswer
 

n°2327273
rat de com​bat
attention rongeur méchant!
Posté le 06-01-2019 à 15:30:08  profilanswer
 

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
n°2327274
tortan v2
Sanglier
Posté le 06-01-2019 à 15:38:23  profilanswer
 

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 ?

n°2327275
rat de com​bat
attention rongeur méchant!
Posté le 06-01-2019 à 15:54:56  profilanswer
 

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').

n°2327282
tortan v2
Sanglier
Posté le 06-01-2019 à 17:00:42  profilanswer
 

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 ?

n°2327283
rat de com​bat
attention rongeur méchant!
Posté le 06-01-2019 à 17:07:32  profilanswer
 

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(++).

n°2327286
tortan v2
Sanglier
Posté le 06-01-2019 à 17:23:37  profilanswer
 

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 ^^

n°2327287
rat de com​bat
attention rongeur méchant!
Posté le 06-01-2019 à 17:30:40  profilanswer
 

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.

n°2327339
aculy
Posté le 07-01-2019 à 17:20:33  profilanswer
 

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.....


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Inversement chaine de caractères dans un tableau

 

Sujets relatifs
Perl - Tableau associatif et listeCapture de sous-chaîne matching expression reguliere
[Python] Récupérer l'avant dernière chaine de caractère d'un tableauEcrire une variable tableau sur une feuille avec colonne masquéees
Python remplacer un caractère dans une chaineVBA organisation de tableau
Tester si la chaine de caractère mène a un dossier ou un fichierBug affichage caractères corrompus Grecs dans suite Office
tableau de classe dans une classe 
Plus de sujets relatifs à : Inversement chaine de caractères dans un tableau


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR