11
votes

C ou c ++. Comment comparer deux chaînes données Char * Pointeurs?

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? XXX

La méthode ci-dessus fonctionne pour INT (année). Comment puis-je le faire fonctionner pour des pointeurs de caractère?


3 commentaires

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)


8 Réponses :


14
votes

Je pense que vous devez utiliser la fonction STRCMP ().


0 commentaires

32
votes

Dans presque l'un ou l'autre, la voie consiste à appeler STRCMP . Si vos cordes (pour une rause étrange) ne sont pas terminées, vous devez utiliser < Code> strncmp à la place.

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 std :: chaîne à la place.


1 commentaires

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.



2
votes

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 ().

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.


2 commentaires

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à.



1
votes

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


2 commentaires

Uhhh, non, vous ne devriez pas utiliser comparer ici. C'est ce que l'opérateur == 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 Comparer 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.



0
votes

Je suppose bien sûr que vous avez de la voiture * pour la voiture fait xxx

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>


0 commentaires

0
votes

Vous devez vraiment utiliser qsort (en C, #include ) ou std :: Trier (en C ++, #include ) au lieu d'une bulle comme ceci. Si c'est C ++ et que vous prenez les conseils de @ Ted à utiliser std :: string 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.


0 commentaires

0
votes

Lorsque vous devez comparer deux points de caractères spécifiquement, vous pouvez les comparer de manière habituelle: en utilisant des opérateurs de comparaison << / code>, > , == etc.

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 ces pointeurs de caractère pointant vers. Afin de comparer les chaînes de style C, vous devez utiliser la fonction standard strcmp .

sur le dessus de cela , 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 si 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?


0 commentaires