Je trie mon éventail de voiture de deux manières. une par année qui est indiquée ci-dessous. et un autre par faire. Faites est un char * Comment puis-je comparer des chaînes lorsque je viens d'avoir des pointeurs pour eux? La méthode ci-dessus fonctionne pour INT (année). Comment puis-je le faire fonctionner pour des pointeurs de caractère? P> p>
8 Réponses :
Je pense que vous devez utiliser la fonction STRCMP (). P>
Dans presque l'un ou l'autre, Cependant, dans C ++, vous ne devriez vraiment pas être manipuler des chaînes dans des tableaux de caractère si vous pouvez raisonnablement l'éviter. Utilisez STRCMP code> . Si vos cordes (pour une rause étrange) ne sont pas terminées, vous devez utiliser < Code> strncmp code> à la place. P>
std :: chaîne code> à la place. P >
Depuis que vous triez, STD :: Tri est votre ami aussi. Cplusplus.com/reference/algorithm/sort Tout ce dont vous avez besoin pour fournir est une comparaison Fonction pour STD :: Trier à utiliser.
Assurez-vous que le char * n'est pas NULL, et si vous le souhaitez, recherchez la fonction stricmp () pour les comparaisons insensibles de casse. Sinon, utilisez STRCMP (). P>
Char * représente en fait l'adresse de la mémoire du premier caractère de chaque chaîne. Donc, vous ne voulez pas vraiment comparer les valeurs des pointeurs, mais les contenus qu'ils indiquent. P>
stricmp () n'est pas standard: Stackoverflow.com/questions/1784767/... Je pense que c'est spécifique à Microsoft.
Si STRICMP () n'est pas dans votre bibliothèque, vérifiez également STRCMPI () et si ce n'est pas là Strcasecmpmp (). Quelque chose avec cette fonctionnalité sera là.
en C sa fonction STRCMP () comme indiqué déjà. En C ++, vous pouvez utiliser la fonction Comparer ().
C: P>
string str1 ("one");
string str2 ("two");
if (str1.compare(str2) != 0) // if they are equal compare return 0
Uhhh, non, vous ne devriez pas utiliser comparer code> ici. C'est ce que l'opérateur == code> sur les chaînes est destiné. La seule raison d'utiliser la comparaison est lorsque vous vous souciez de savoir si une chaîne est (alphabétiquement) inférieure ou supérieure à celle de l'autre.
@ T.e.d. La fonction code> Comparer code> est une comparaison numérique (valeur de caractère) plutôt que par rapport à l'alphabétique. C'est à dire. une comparaison lexicographique des cordes.
Je suppose bien sûr que vous avez de la voiture * pour la voiture fait vous souhaitez comparer contre 0 car STRCMP retournera 0 s'il n'y a pas de différence entre les deux chaînes. de
STRCMP prend deux const Char *.
http://www.cplusplus.com/reference/clibrary/cstring/strcmpmp/ < / a> p> p>
Vous devez vraiment utiliser qsort code> (en C, #include std :: Trier code> (en C ++, #include std :: string code> au lieu des chaînes de Cra C, vous n'avez même pas à spécifier une comparaison car le << / code> l'opérateur sera utilisé et fera la bonne chose. P>
Lorsque vous devez comparer deux points de caractères em> spécifiquement, vous pouvez les comparer de manière habituelle: en utilisant des opérateurs de comparaison Le problème dans la procédure est que vous ne devez pas comparer deux pointeurs de caractères. Ce dont vous avez besoin, c'est de comparer deux cordes de style C em> ces pointeurs de caractère pointant vers. Afin de comparer les chaînes de style C, vous devez utiliser la fonction standard sur le dessus de cela strong>, l'approche de la manipulation des éléments nulles dans votre algorithme de tri ne semble pas avoir de sens que ce soit. Imaginez une matrice d'entrée qui contient des pointeurs NULL alternants et des pointeurs non nuls. Il est évident que votre algorithme de tri ne triera jamais quoi que ce soit, car la condition de votre << / code>, > code> , == code> etc. p>
strcmp code>. P>
si code> ne sera jamais vraie. Vous devez reconsidérer votre manipulation d'éléments NULL. Bien sûr, tout d'abord, vous devez décider quoi faire avec eux. Ignorer et partir en place? Poussez-vous à une extrémité du tableau? Quelque chose d'autre? P>
STRCMP () vous aidera à comparer deux caractères * http://www.cplusplus.com/reference/cstring/strcmpmp/?kw = STRCMP P>
Sur une note sans rapport: vous savez que le tri de la bulle est un super-duper inefficace, non?
Sur de très grandes intrants, c'est un super-duper inefficace. Sur de petites tailles d'entrée, il peut en réalité être plus rapide que plus sexy, en raison de la mise en œuvre si simple. Bien sûr sur de petites entrées (comme celle-ci), la vitesse n'est pas vraiment une préoccupation de toute façon.
Mais si vous souhaitez trier de petites entrées, vous pouvez aussi bien utiliser l'insertion Trier, ce qui a une meilleure performance moyenne, même si c'est aussi O (n ^ 2)