2010-04-01 13 views
0

J'ai un programme qui place les structures dans une liste liée en fonction du 'nom' qu'elles y ont stocké.Trier les chaînes par première lettre [C]

Pour trouver leur place dans la liste, j'ai besoin de savoir si le nom im insertion est plus tôt ou plus tard dans l'alphabet, puis ceux dans les structures à côté.

Les noms sont à l'intérieur des structures auxquelles j'ai accès. Je n'ai pas besoin d'une comaparison complète si c'est plus de travail, même si la première lettre est correcte.

Merci pour l'aide!

Répondre

1

Il est pas clair pour moi ce que votre question est, mais quelque chose comme ça pourrait fonctionner:

if (node1->name[0] <= node2->name[0]) { 
    ... 
} else { 
    ... 
} 

Ce comparera la première lettre du nom dans chacun des nœuds.

1

Si vous avez deux chaînes C, a et b, vous pouvez simplement comparer leurs premiers éléments:

*a == *b 

== peut être l'un des six opérateurs relationnels. Rappelez-vous qu'avec les chaînes C, le char* pointe vers le premier caractère de la chaîne.

+0

N'oubliez pas de vérifier la valeur NULL – Andrey

1

strcmp() compare deux chaînes C et vous dira dans quel ordre elles se trouvent, ou si elles sont identiques. Si vous ne vous souciez pas de cas, vous pouvez utiliser strcasecmp(). Ces fonctions ne compareront plus les chaînes nécessaires pour déterminer l'ordre de retour.

+0

Notez, cependant, que strcasecmp n'est pas standard C. – Arkku

1

Vous pouvez simplement parcourir la liste et insérer le nouvel élément au bon endroit en fonction des comparaisons que vous faites en passant chaque élément. La version la plus simple sensible à la casse peut être effectuée simplement en comparant les valeurs numériques des lettres (par exemple a[0] < b[0]), ou vous pouvez convertir les deux en un cas commun si vous voulez être insensible à la casse (voir ctype.h). Ou vous pouvez comparer les mots entiers avec strcmp.