Je suis en fait de travailler sur un C++ inverti chaîne/char [] MéthodesC++ fait ce qu'il veut | Char [] et inversé Cout char []
#include <iostream>
using namespace std;
void inverse(string input)
{
int length = input.length();
char* output = new char[length];
for(int i = 0; i < length; i++)
{
output[length - (i + 1)] = input[i];
}
cout << output << endl;
delete output;
}
int main(int argc, char *argv[])
{
while(true)
{
string in;
cin >> in;
inverse(in);
}
return 0;
}
Le problème est, quand j'entrer dans une chaîne avec 3/5/7 et ainsi sur les lettres, alors il va inverser, alors si c'est correct, mais si j'entre une longueur de chaîne de 2/4/6 et ainsi de suite caractères il ya des caractères aléatoires sur son et et seulement quand j'entre ces longueur de nombre.
Je suis tellement confus parce que cette erreur apparaît seulement avec des nombres pairs.
Voici un petit exemple: Here's a little example:
Voici le nouveau code (tout fonctionne bien ici), je sais qu'il a quelque chose à voir avec le/0 à la fin du tableau, mais pourquoi seuls les nombres pairs .
#include <iostream>
using namespace std;
void inverse(string input)
{
int length = input.length();
char* output = new char[length + 1];
for(int i = 0; i < length; i++)
{
output[length - (i + 1)] = input[i];
}
output[length] = '\0';
cout << output << endl;
delete output;
}
int main(int argc, char *argv[])
{
while(true)
{
string in;
cin >> in;
inverse(in);
}
return 0;
}
Quelqu'un peut-il m'aider à trouver une solution pour cela?
Pour commencer, il vous manque '#include'. Aussi: recherchez ['std :: reverse''] (http://en.cppreference.com/w/cpp/algorithm/reverse). –
rubenvb
Pourquoi 'char * output = new char [longueur + 1];' au lieu de 'std :: string output (longueur + 1, 0);', vous prenez déjà 'std :: string' comme argument. –
Je suis d'accord avec Ralph Tandetzky Réponse. J'ai remarqué une fuite de mémoire dans votre application, vous devez supprimer le tableau entier. donc 'delete output;' devrait être 'delete [] output' –