J'ai commencé à apprendre à programmer et j'essaie de stocker une chaîne dans un tableau de caractères mais dans l'ordre inverse, de sorte que la position d'index du tableau 0 (zéro) pointe vers le dernier caractère de la chaîne. J'ai essayé d'utiliser des boucles for dans des termes différents, mais en obtenant le résultat souhaité. Je veux résoudre ce problème en C ++. Voici le code sur lequel je suis coincé,

#include <iostream>

using namespace std;

int main()
{
     char str[maxn];
     string entstr;

     cin>>entstr;

     int len = entstr.length();
     cout<<len<<endl;

     for(int i = 0 ; i < len ; i++)        //this makes \n no sense//
         for(int j = len-1 ; j >= 0 ; j--)
             str[i] = entstr[j];


     for(int i = len-1 ; i >= 0 ; i--)
         cout<<"Straight for array "<<i<<" "<<str[i]<<endl;        
            

    return 0;
}
OUTPUT:
sachin
6
Straight for array 5 s
Straight for array 4 s
Straight for array 3 s
Straight for array 2 s
Straight for array 1 s
Straight for array 0 s
0
Sachin Tayade 24 oct. 2020 à 19:56

2 réponses

Meilleure réponse

Je suppose que vous ne voulez pas utiliser std::reverse mentionné dans les commentaires parce que vous voulez pratiquer vos compétences algorithmiques.

Vous pouvez vous aider avec ce programme court. Il utilise std::malloc pour allouer un tableau char de la taille de la chaîne d'entrée. Ensuite, il vous suffit de boucler en arrière sur le caractère de la chaîne et de le stocker dans votre tableau. Je vous recommande de suivre (notez-le sur un papier) les valeurs de i et len-1-i à l'intérieur de la boucle. Cela vous aidera à comprendre comment fonctionne l'index.

#include <iostream>

using namespace std;

int main()
{
    string entstr;
    cin >> entstr;

    int len = entstr.length();
    char* charArray = (char*) malloc (len);
     
    for(int i = 0; i < len; i++)
    {
        charArray[i] = entstr[len-1-i];
    }
    
    cout << "charArray contains: ";
    for(int j = 0; j < len; j++)
    {
        cout << charArray[j];
    }

    return 0;
}

Bonne chance!

0
BNilsou 24 oct. 2020 à 18:08

Je ne pense pas que deux boucles soient utiles. Commencez simplement la chaîne par l'avant et votre tableau depuis len-1 (comme vous l'avez fait dans la boucle for pour l'impression). Vous pouvez prendre la longueur souhaitée pour votre tableau de caractères.

#include <iostream>

using namespace std;

int main()
{
     char str[100]; //put whatever you want the length of the char array to be
     string entstr;

     cin>>entstr;

     int len = entstr.length();
     cout<<len<<endl;

     for(int i = 0 ; i < len ; i++)
     {
         str[len-1-i]=entstr[i];
     }


     for(int i = len-1 ; i >= 0 ; i--)
         cout<<"Straight for array "<<i<<" "<<str[i]<<endl;        
            

    return 0;
}

Vous pouvez également utiliser deux pointeurs pour le même, c'est-à-dire un en commençant par l'avant et un en partant de la fin (si vous êtes confus)

 for(int i = 0, j=len-1 ; i < len ; i++, j--)
 {
     str[j]=entstr[i];
 }
0
Dharman 24 oct. 2020 à 20:29