C ou C++. Comment comparer deux chaînes de caractères donnée char * pointeurs?
Je suis le tri de ma gamme de voiture de deux façons. un par an, ce qui est illustré ci-dessous. et d'un autre de faire. Faire est un char* Comment comparer les cordes quand j'ai juste des pointeurs vers eux?
int i, j;
for(i=0; i<100; i++){
for(j=0; j<100-i; j++){
if(carArray[i]!=NULL && carArray[j]!= NULL && carArray[j+1]!=NULL){
if(carArray[i]->year > carArray[j+1]->year){
swap(carArray[j], carArray[j+1]);
}
}
}
}
La méthode ci-dessus fonctionne pour int (année). Comment puis-je le faire fonctionner pour les pointeurs de char?
Sur une autre note: vous ne connaissez que le tri à bulles est super-duper inefficace, non?
Sur de très grandes entrées, il est super-duper inefficace. Sur petite entrée tailles, il peut effectivement être plus rapide que la plus sexy de toutes sortes, parce qu'il est si simple à mettre en œuvre. Bien sûr, sur les petites entrées (comme celui-ci) la vitesse n'est pas vraiment un souci, de toute façon.
Mais si vous êtes à la recherche pour trier les petites entrées, vous pourriez aussi bien utiliser le tri par insertion, qui a une meilleure performance moyenne, même si c'est également en O(n^2)
Sur de très grandes entrées, il est super-duper inefficace. Sur petite entrée tailles, il peut effectivement être plus rapide que la plus sexy de toutes sortes, parce qu'il est si simple à mettre en œuvre. Bien sûr, sur les petites entrées (comme celui-ci) la vitesse n'est pas vraiment un souci, de toute façon.
Mais si vous êtes à la recherche pour trier les petites entrées, vous pourriez aussi bien utiliser le tri par insertion, qui a une meilleure performance moyenne, même si c'est également en O(n^2)
OriginalL'auteur user69514 | 2010-02-24
Vous devez vous connecter pour publier un commentaire.
Dans à peu près, soit l'un, la façon est d'appeler
strcmp
. Si vos cordes (pour une raison ou une autre) ne sont pas NULS fin, vous devez utiliserstrncmp
à la place.Toutefois, en C++, vous ne devriez pas être la manipulation de chaînes de caractères dans les tableaux de char si vous pouvez raisonnablement éviter. Utilisation
std::string
à la place.OriginalL'auteur T.E.D.
Je pense que vous devez utiliser la fonction strcmp ().
OriginalL'auteur synepis
Assurez-vous que le char * n'est pas null, et si vous voulez, regardez pour les stricmp() la fonction de casse des comparaisons. Sinon, utiliser strcmp().
char*, représente en fait l'adresse mémoire du premier caractère de chaque chaîne. Si vous ne voulez pas vraiment être en comparant les valeurs des pointeurs, mais le contenu qu'ils pointent.
Si stricmp() n'est pas dans votre bibliothèque, également vérifier strcmpi() et si ce n'est pas là strcasecmp(). Quelque chose avec cette fonctionnalité sera là.
OriginalL'auteur Walt Stoneburner
Dans C sa fonction strcmp() comme déjà indiqué. En C++, vous pouvez utiliser la fonction compare ().
C:
C++
compare
ici. C'est ce que le==
opérateur sur les chaînes de est pour. La seule raison d'utiliser comparer quand vous vous souciez de savoir si une chaîne est (par ordre alphabétique) plus ou moins grande que l'autre.le
compare
fonction n'numérique (valeur de caractère) plutôt qu'alphabétique de comparaison. I. e. un vocabulaire de la comparaison des chaînes de caractères.OriginalL'auteur Milan
Je suis bien sûr en supposant que vous avez ici char * pour la voiture fait
Vous voulez comparer à 0 parce que strcmp renvoie 0 si il n'y a pas de différence entre les deux chaînes.
strcmp prend deux const char *.
http://www.cplusplus.com/reference/clibrary/cstring/strcmp/
OriginalL'auteur Craig
Lorsque vous avez besoin de comparer deux pointeurs de char plus précisément, vous pouvez comparer la façon habituelle: en utilisant des opérateurs de comparaison
<
,>
,==
etc.Le problème dans cette affaire est que vous ne pas besoin de comparer deux pointeurs de char. Ce que vous avez besoin est de comparer deux C-style chaînes ces char pointeurs pointent vers. Afin de comparer le style C des chaînes, vous devez utiliser la norme
strcmp
fonction.Sur le dessus de que, l'approche à la gestion des éléments null dans votre algorithme de tri qui ne semble pas faire quelque sens que ce soit. Imaginez un tableau qui contient une alternance de pointeurs nuls et non-pointeurs null. Il est évident, que votre algorithme de tri ne sera jamais la sorte quoi que ce soit, puisque la condition de votre
if
ne sera jamais vrai. Vous devez reconsidérer votre manipulation des éléments null. Bien sûr, tout d'abord, vous devez décider quoi faire avec eux. Ignorer et laisser en place? Pousser à l'une des extrémités du tableau? Quelque chose d'autre?OriginalL'auteur AnT
strcmp() vous aidera à comparer deux char*
http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp
OriginalL'auteur alexis
Vous devriez vraiment utiliser
qsort
(en C,#include <stdlib.h>
) oustd::sort
(en C++,#include <algorithm>
) au lieu d'un tri à bulles comme ça. Si c'est du C++ et que vous prenez @T. E. D. conseils d'utilisationstd::string
au lieu de matières premières chaînes C, vous n'avez même pas à spécifier une comparaison parce que la<
opérateur sera utilisé et faire la bonne chose.OriginalL'auteur Scott Wolchok