Maison >Opération et maintenance >exploitation et maintenance Linux >Utilisez le langage C pour écrire la commande wc - comptez le nombre de caractères, de mots et de lignes

Utilisez le langage C pour écrire la commande wc - comptez le nombre de caractères, de mots et de lignes

齐天大圣
齐天大圣original
2020-10-26 11:26:365091parcourir

Nous savons qu'il existe une commande très couramment utilisée sur le système d'exploitation Linux, qui est la commande wc utilisée pour compter le nombre de caractères, de mots et de lignes. Aujourd’hui, essayons d’utiliser le langage C pour écrire un programme avec des fonctions similaires (Remarque : la lecture de cet article nécessite une certaine connaissance de base du langage C).

Lors de l'écriture de ce programme, vous devez maîtriser l'utilisation de deux fonctions, getchar() et putchar().

getchar est utilisé pour lire un caractère à partir de l'entrée standard, tandis que putchar est utilisé pour imprimer un caractère sur la sortie standard. Compter le nombre de caractères d'entrée standard est relativement simple. Tant que la fonction getchar peut encore lire les caractères, la variable comptant le nombre de caractères augmentera de 1. Compter le nombre de lignes est également simple. Tant que le caractère lu est le caractère de nouvelle ligne n, la variable de la fonction statistique sera augmentée de 1.

La principale difficulté ici est de savoir comment compter le nombre de mots. Mon idée ici est de définir une variable d'état IN_WORD lorsque les caractères lus sont des espaces (les espaces, les tabulations horizontales et les nouvelles lignes sont tous des espaces). caractère), la valeur IN_WORD est 0 et le nombre de mots comptés reste inchangé. Lorsqu'un caractère non vide est lu, le nombre de mots comptés est augmenté de 1 et la valeur IN_WORD est 1. Lorsque la valeur d'état est. 1, même s'il est lu. Si les caractères autres que les espaces sont supprimés, le nombre de statistiques de mots ne change pas.

Ci-dessous, postez le code

#include <stdio.h>
#include <ctype.h>

#define IN_WORD 1
#define OUT_WORD 0

void main (void)
{
    int nc,nw,nl;
    char c,word_flag;
    
    nc = nw = nl = 0;
    word_flag = OUT_WORD;
    
    while ((c = getchar()) != EOF) {
        nc ++;
        
        if (c == &#39;\n&#39;) {
            nl ++;
        }
        
        if (!isspace(c) && word_flag == OUT_WORD) {
            nw ++;
            word_flag = IN_WORD;
        } else if (isspace(c) && word_flag == IN_WORD) {
            word_flag = OUT_WORD;
        } 
    }
    
    printf("%d\t%d\t%d\n", nc, nw, nl);
}

Le code ci-dessus est très simple Les trois variables nc, nw et nl comptent respectivement le nombre de caractères, de mots et de lignes. Word_flag est utilisé pour enregistrer le statut. Il existe deux types de statut, IN_WORD et OUT_WORD.

Ensuite, testons le code ci-dessus. Ce qui suit est un morceau de texte :

Product-minded engineers are developers with lots of interest in the product itself. 
They want to understand why decisions are made, how people use the product, and love to be involved in making product decisions.
They&#39;re someone who would likely make a good product manager if they ever decide to give up the joy of engineering. 
I&#39;ve worked with many great product-minded engineers and consider myself to be this kind of developer. 
At companies building world-class products, product-minded engineers take teams to a new level of impact.

Le texte ci-dessus compte un total de 86 mots et un total de cinq lignes.

# cat 1.txt | ./a.out 
542 86 5

Vous pouvez voir que le programme peut compter normalement le nombre de caractères, de mots et de lignes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn