2009-07-26 7 views
0

Je lis le livre bien connu "Le langage de programmation C, 2e édition" et il y a un exercice auquel je suis coincé. Je n'arrive pas à comprendre ce qu'il faut faire exactement, alors j'aimerais que quelqu'un m'explique.Le langage de programmation C 2. ed. question

Il est l'exercice 5-17:

  • Ajouter une capacité de champ recherche, de sorte que le tri peut être fait sur les champs dans les lignes, chaque champ trié selon un ensemble indépendant d'options.

Qu'est-ce que le programme d'entrée attend de la ligne de commande? qu'est-ce que cela signifie par "ensemble indépendant d'options"?

+0

Il peut être utile de savoir dans quel contexte la question est posée, comme dans le chapitre qui l'entoure. Merci – anderstornvig

+0

Le chapitre est appelé "pointeurs vers les fonctions", il explique comment écrire un programme de tri qui peut trier par des règles différentes en passant la fonction appropriée pour la comparaison à travers le pointeur de fonction. Il y a aussi des commutateurs comme -r pour reverse, -f pour fold, -d pour directory etc ... – paleman

Répondre

2

Étudiez l'utilitaire POSIX sort en ignorant les options héritées. Ou étudier le programme GNU sort; il a même plus d'options que POSIX sort.

Vous devez choisir entre des champs de largeur fixe comme suggéré par Neil Butterworth dans ses champs answer et width-width. Vous devez décider quel caractère sépare les champs de largeur variable. Vous devez décider des modes de tri à prendre en charge pour chaque champ (chaîne, chaîne pliée, chaîne téléphonique, entier, virgule flottante, date, etc.) ainsi que la direction de tri (avance/retour ou montée/descente). Les 'options indépendantes' signifient que vous pouvez avoir différents critères de tri pour différents champs. C'est-à-dire que vous pouvez organiser le tri du champ 1 dans l'ordre ascendant des chaînes, le tri du champ 3 dans l'ordre décroissant de l'entier et le tri du champ 9 dans l'ordre croissant des dates.

Notez que lors du tri, le critère principal est le premier champ clé spécifié. Lorsque deux lignes sont comparées, s'il existe une différence entre le premier champ clé dans les deux lignes, les champs clés suivants ne sont jamais pris en compte. Lorsque deux rangées sont identiques dans le premier champ clé, le critère du second champ clé détermine l'ordre relatif; alors, si les deuxièmes champs clés sont les mêmes, le troisième champ clé est consulté, et ainsi de suite. S'il n'y a plus de champs clés spécifiés, le critère de tri par défaut habituel est "toute la ligne d'entrée dans l'ordre ascendant des chaînes". Un tri stable préserve l'ordre relatif de deux lignes dans les données d'origine qui sont identiques lorsque comparées à l'aide des critères de champ clé (au lieu d'utiliser la comparaison par ligne complète par défaut).

+0

Merci Jonathan et Neil Butterworth c'est beaucoup plus clair maintenant. Juste une sous-question: si je choisis des champs de largeur variable, comment les spécifier dans la ligne de commande? – paleman

2

Cela fait référence à la possibilité de spécifier des sous-champs dans chaque ligne à trier. Par exemple:

sort -f1:4a -f20:28d somefile.txt 

triaient le champ commençant à la position de caractère 1 et l'extension à POSITION4 ascendante et dans ce genre le domaine commençant à la position 20 et se prolongeant jusqu'à 28 descendant.

Bien sûr, il y a beaucoup d'autres façons de spécifier les champs, l'ordre de tri, etc. La conception des commutateurs de ligne de commande est l'un des points de l'exercice, à mon humble avis.

+0

Que voulez-vous dire "dans ce genre" exactement? Pouvez-vous s'il vous plaît écrire quelques lignes et qu'écrire triées si l'entrée de la ligne de commande est, disons comme ceci: sort -f1: 4a -f7: 11a unfichier.txt – paleman

Questions connexes