2011-05-08 4 views
1

Je suis en train de comparer deux caractères et voir que l'on est plus lexicographique et le tri par ce problème est que je ne suis pas sûr de savoir comment comparer caractère J'ai essayé de le faire avec strcmp commepointeur STRCMP de nombre entier sans fonte

struct example 
{ 
char code; 
} 
if (strcmp(i->code, j->code) < 0) 
    return 1; 

avertissement: passage d 'arguments 1 de âstrcmpâ fait un entier en pointeur sans fonte

avertissement: Argument passage 2 de âstrcmpâ fait un entier en pointeur sans un casting

Je sais que strcmp est pour les chaînes, dois-je juste malloc et faire le th Le code char est-il plutôt une chaîne de caractères ou existe-t-il un autre moyen de comparer des caractères uniques?

+0

si (i-> code < j->)/* si vous êtes seulement la comparaison d'un personnage, vous pouvez les comparer caractère */ – forsvarir

+0

Voulez-vous être le cas significatif ? Vous pouvez utiliser ['tolower()'] (http://www.cplusplus.com/reference/clibrary/cctype/tolower/) ou l'une des fonctions connexes avant de comparer les valeurs. –

Répondre

3

char est un type entier.

Vous comparez les objets char utilisant les opérateurs relationnels et d'égalité (<, ==, etc.).

+0

ah ok j'ai oublié char était un nombre entier merci –

2

Puisque vous comparez les caractères et non nulle fin des chaînes, procédez comme suit:

if (i->code < j->code) 
0

Essayez

if (i->code < j->code) 
    ... 
3

strcmp() prend une chaîne terminée par null, donc en C un char * . Vous lui passez un seul caractère, un char. Ce caractère est automatiquement promu à int dans l'expression (cela arrive toujours avec char dans les expressions en C) et ensuite int est tenté de se transformer en char*. Dieu merci, cela échoue.

Utilisez ce lieu:

if (i->code < j->code) 
Questions connexes