Reverse String C ++ en utilisant un tableau char
J'ai écris un programme en C++ pour inverser une chaîne de caractères. - Je stocker une chaîne de caractères en tableau de caractères. Pour inverser une chaîne de caractères, je suis en utilisant le même tableau de caractères et de la variable temp pour permuter entre les personnages d'un tableau.
#include<iostream>
#include<string>
using namespace std;
void reverseChar(char* str);
char str[50],rstr[50];
int i,n;
int main()
{
cout<<"Please Enter the String: ";
cin.getline(str,50);
reverseChar(str);
cout<<str;
return 0;
}
void reverseChar(char* str)
{
for(i=0;i<sizeof(str)/2;i++)
{
char temp=str[i];
str[i]=str[sizeof(str)-i-1];
str[sizeof(str)-i-1]=temp;
}
}
Maintenant cette méthode ne fonctionne pas et que je vais me la Chaîne NULL comme résultat après l'exécution du programme.
Donc, je veux savoir pourquoi je ne peux pas assimiler tableau de caractères, pourquoi ne serait-ce pas le programme de travail. Et qu'est-ce que la solution ou astuce que je peux utiliser pour faire le même programme de travail?
source d'informationauteur StackPointer
Vous devez vous connecter pour publier un commentaire.
sizeof(str)
ne fait pas ce que vous attendez.Donné un
char *str
sizeof(str)
ne sera pas vous donner la longueur de cette chaîne. Au lieu de cela, il vous donnera le nombre d'octets qu'un pointeur occupe. Vous êtes probablement à la recherche pourstrlen()
à la place.Si l'on fixe, on aurait:
C'est le C++, l'utilisation
std::swap()
En C++, si vous voulez échanger le contenu de deux variables, l'utilisation
std::swap
au lieu de la variable temporaire.Ainsi, au lieu de:
Vous suffit d'écrire:
Remarquez comment beaucoup plus claire de ce qui est.
Vous êtes à l'aide de C++, il suffit d'utiliser
std::reverse()
Variables globales
Il est extrêmement pratique pour faire des variables globales s'ils n'ont pas besoin de l'être. En particulier, je fais référence à
i
à ce sujet.Résumé
Si je devais écrire cette fonction, il devrait ressembler à l'un des deux implémentations suivantes:
Lors de l'essai, ces deux produisent
dlrow olleh
sur une entrée dehello world
.Le problème est que dans votre fonction,
str
n'est pas un tableau mais un pointeur. Doncsizeof
vous obtiendrez la taille du pointeur, pas la longueur du tableau il indique. Aussi, même si elle vous a donné la taille de la matrice, ce qui n'est pas la longueur de la chaîne. Pour cela, une meilleure utilisationstrlen
.Pour éviter les multiples appels à
strlen
donner la fonction d'un autre paramètre, qui indique la longueur:et de l'appeler avec
reverseChar(str, strlen(str))
Une autre amélioration, comme mentionné dans les commentaires, est d'utiliser
std::swap
dans le corps de la boucle:Aussi, il y a
std::reverse
qui n'a presque exactement cela.Si j'étais vous, je voudrais juste écrire de la sorte:
C'est une façon très simple à faire, et fonctionne très bien.