2
votes

Comptez le nombre de lettres dans une petite matrice qui apparaissent dans une grande matrice

C - La méthode Void compte le nombre de lettres de la petite matrice qui apparaissent également dans la grande matrice SANS utiliser string.h

La fonction Count () a besoin compter les lettres de la petite matrice qui apparaissent dans la grande matrice en utilisant des POINTEURS.

Le résultat doit être présenté dans une nouvelle matrice de résultats. La matrice de résultat aura les mêmes dimensions que la petite matrice, mais chaque cellule sera un nombre entier représentant le nombre de fois que la lettre de la petite matrice apparaîtra dans la grande matrice.

J'ai essayé le pointeur utilisé à un caractère spécifique dans la petite matrice.

1 3 0 2
3 4 2 0 
2 1 2 4

Le décompte doit retourner main. Cet exemple des 2 matrices et de la nouvelle matrice doit être

Big Matrix

U N T E
C P G X
D L A B

Small Matrix strong>

P A D A Q E Q B G H R O P H C W S P B Q
M B R P R N V S C H M U J P W C V M F D
V W R K E V I Y K K Q Y N H N G V L B Z

Matrice de résultats

void Count(char mat[ROWS][COLS], char smallMat[SIZE][SIZE]) {
    int i, j;
    int count = 0;
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++) {
            const char stringptr = smallMat[i][j];
            if (stringptr == mat[i][j])
                count++;
        }

    }
    return count;
}

c

9 commentaires

Je créerais d'abord un tableau avec le nombre de caractères pour les lettres de la grande matrice. Ensuite, vous pouvez parcourir la deuxième matrice, en recherchant les décomptes de votre tableau.


AUCUNE idée: / Comment faire ... Essayé


La fonction Count ne retournera-t-elle qu'un seul compte? Il semble que vous souhaitiez soit appeler Count une fois pour chaque cellule de la petite matrice, en renvoyant le nombre pour cette cellule, soit créer une matrice de résultats avec la fonction Count. Cependant, la fonction Count n'est pas déclarée pour faire l'un ou l'autre de ces. Pouvez-vous changer les arguments Count ()?


Eh bien, si vous êtes prêt à limiter les lettres aux majuscules et à accepter un jeu de caractères ANSI, vous pouvez créer un tableau int count [26] . Initialisez toutes les entrées à zéro. Ensuite, parcourez chaque élément de la grande matrice. L'index du tableau sera c - 'A' c est le caractère. Donc 'A' donne un index de 0 et 'Z' donne un index de 25. Ensuite, faites simplement count [c - 'A'] ++; pour chaque caractère c dans le grand tableau. Une fois terminé, comptes contiendra le compte de chaque lettre (y compris celles qui n'apparaissent pas dans le grand tableau, dont les comptes seront zéro).


Ensuite, vous avez terminé avec le grand tableau. Passez au petit. Répétez dessus. Pour chaque lettre du petit tableau, l'index est à nouveau c - 'A' . Le nombre de fois où cette lettre apparaît dans le grand tableau est alors compte [c - 'A'] .


Oui jardinier je peux changer les arguments de la méthode


Il est considéré comme une mauvaise forme de diriger les gens vers des images de code ou des images de nombres. La personne qui vous aide souhaite copier et coller autant que possible.


Il y a 5 "P" dans votre grande matrice d'exemple, mais la position correspondante dans votre exemple de matrice de résultats n'en montre que 4.


@LinorBenYossef: vous pouvez accepter l'une des réponses en cliquant sur la coche grise sous son score.


4 Réponses :


1
votes

Quelque chose comme ça pourrait fonctionner. Je le décomposerais en une fonction de comptage qui prend deux arguments: la lettre que vous recherchez et un pointeur vers la grande matrice.

Je créerais ensuite une matrice de résultat avec les mêmes dimensions que la petite matrice et appellerais le nombre fonction pour chaque cellule de la matrice de résultat, en passant dans la grande matrice, et en affectant le résultat de chaque appel de comptage à chaque cellule successive de la matrice de résultat.

Enfin, pour rendre la fonction main () claire, créer une fonction finale qui imprimera une matrice de résultats. Quelque chose comme ceci:

Modifié : j'ai modifié le code en fonction des mises à jour de la question du PO. Ce code crée la sortie suivante:

#include <stdio.h>
#include <stdint.h>
#include <limits.h>

const size_t ROWS = 3;
const size_t COLUMNS = 20;
const size_t SMALL_ROWS = 3;
const size_t SMALL_COLUMNS = 4;
const size_t SIZE = 4;

char LargeMatrix[ROWS][COLUMNS] =
    {{'P', 'A', 'D', 'A', 'Q', 'E', 'Q', 'B', 'G', 'H', 'R', 'O', 'P', 'H', 'C',
      'W', 'S', 'P', 'B', 'Q'},
     {'M', 'B', 'R', 'P', 'R', 'N', 'V', 'S', 'C', 'H', 'M', 'U', 'J', 'P', 'W',
      'C', 'V', 'M', 'F', 'D'},
     {'V', 'W', 'R', 'K', 'E', 'V', 'I', 'Y', 'K', 'K', 'Q', 'Y', 'N', 'H', 'N',
      'G', 'V', 'L', 'B', 'Z'},};

char SmallMatrix[SIZE][SIZE] =
    {{'U', 'N', 'T', 'E'}, {'C', 'P', 'G', 'X'}, {'D', 'L', 'A', 'B'}};

void Count(char mat[ROWS][COLUMNS], char c, size_t *count)
{
  size_t counter = 0;  // Initialize the count answer cell
  for (size_t i = 0; i < ROWS; i++) {
    for (size_t j = 0; j < COLUMNS; j++) {
      if (mat[i][j] == c)
        counter++;
    }

  }
  *count = counter;

}

// clear the char array
void zero_char_array(char *array, size_t len)
{
  for (size_t i = 0; i < len; i++)
    array[i] = 0;
}
//
//
void PrintMaxesAndMins(char haystack[ROWS][COLUMNS],
                       char needlestack[SMALL_ROWS][SMALL_COLUMNS],
                       size_t answerStack[SMALL_ROWS][SMALL_COLUMNS],
                       size_t result_rows,
                       size_t result_columns)
{
  char max_char; // char that occurred the most
  char min_char; // char that occurred the least
  size_t max_char_count =
      0;  // best to use unsigned ints when a value should never go negative.
  size_t min_char_count = UINT32_MAX; // Value should not go negative.
  char max_chars[SMALL_COLUMNS * SMALL_ROWS]; // save all possible max chars
  char *next_max_char;
  char min_chars[SMALL_COLUMNS * SMALL_ROWS]; // sall all possible min chars
  char *next_min_char;

  size_t counter = 0;  // Initialize the count answer cell
  for (size_t i = 0; i < result_rows; i++) {
    for (size_t j = 0; j < result_columns; j++) {
      if (answerStack[i][j] > max_char_count) {
        max_char_count = answerStack[i][j];  // we have a new max

        zero_char_array(max_chars, SMALL_COLUMNS * SMALL_ROWS);
        next_max_char =
            max_chars;  // We have a new max, reset result char array

        *next_max_char = needlestack[i][j];// grab character from needle stack
        ++next_max_char;  // increment.  Could do in prior line, but try to be clear.
      } else if (answerStack[i][j] >= max_char_count) {
        // we are adding to an old max
        *next_max_char = needlestack[i][j];// grab character from needle stack
        ++next_max_char;  // increment.  Could do in prior line, but try to be clear.
      }
      if (answerStack[i][j] > 0 &&  answerStack[i][j] < min_char_count) {
        min_char_count = answerStack[i][j];  // we have a new min

        zero_char_array(min_chars, SMALL_COLUMNS * SMALL_ROWS);
        next_min_char =
            min_chars;  // We have a new min, reset result char array

        *next_min_char = needlestack[i][j];// grab character from needle stack
        ++next_min_char;  // increment.  Could do in prior line, but try to be clear.
      } else if (answerStack[i][j] > 0 && answerStack[i][j] <= min_char_count) {
        // we are adding to an old max
        *next_min_char = needlestack[i][j];// grab character from needle stack
        ++next_min_char;  // increment.  Could do in prior line, but try to be clear.
      }
    }
  }

  if (max_char_count > 0) {
    printf("The most repetitive char(s) occurred %lu time(s): ", max_char_count);
    next_max_char = max_chars;

    while (*next_max_char)
      printf(" %c", *next_max_char++);
  }
  printf("\n\n");
  if (min_char_count > 0) {
    printf("The least repetitive char(s) occurred %lu time(s): ", min_char_count);

    next_min_char = min_chars;
    while (*next_min_char) {
      printf(" %c", *next_min_char++);
    }
  }

}

// BuildResultMatrix()
// haystack is a pointer to the large matrix.
// needlestack is a pointer to the small matrix.
// answerStack is the result matrix of size_t
void BuildResultMatrix(char haystack[ROWS][COLUMNS],
                       char needlestack[SMALL_ROWS][SMALL_COLUMNS],
                       size_t answerStack[SMALL_ROWS][SMALL_COLUMNS],
                       size_t result_rows,
                       size_t result_columns)
{

  // Loop through the rows and columns of the small matrix
  for (size_t i = 0; i < result_rows; i++) {
    for (size_t j = 0; j < result_columns; j++) {
      // Pass the current cell of the small matrix to Count()
      // Count() will then loop through the large matrix, counting
      // the number of cells with the current cell value from the small matrix.
      // Count() will place the final count into the correpsonding cell of the
      // answerStack matrix.
      Count(LargeMatrix, needlestack[i][j], &answerStack[i][j]);
    }
  }
}

void PrintLargeCharMatrix(char (*matrix)[COLUMNS], size_t rows)
{
  for (size_t i = 0; i < rows; i++) {
    for (size_t j = 0; j < COLUMNS; j++) {
      printf("%c ", matrix[i][j]);
    }
    printf("\n");
  }
  printf("\n");
}
void PrintSmallCharMatrix(char (*matrix)[SMALL_COLUMNS], size_t rows)
{
  for (size_t i = 0; i < rows; i++) {
    for (size_t j = 0; j < SMALL_COLUMNS; j++) {
      printf("%c ", matrix[i][j]);
    }
    printf("\n");
  }
  printf("\n");
}
void PrintCountMatrix(size_t (*matrix)[SMALL_COLUMNS], size_t rows)
{
  for (size_t i = 0; i < rows; i++) {
    for (size_t j = 0; j < SMALL_COLUMNS; j++) {
      printf("%lu ", matrix[i][j]);
    }
    printf("\n");
  }
  printf("\n");
}
int main()
{
  size_t ResultMatrix[SMALL_ROWS][SMALL_COLUMNS];

  PrintLargeCharMatrix(LargeMatrix, ROWS);
  PrintSmallCharMatrix(SmallMatrix, SMALL_ROWS);

  BuildResultMatrix(LargeMatrix,
                    SmallMatrix,
                    ResultMatrix,
                    SMALL_ROWS,
                    SMALL_COLUMNS);

  PrintCountMatrix(ResultMatrix, SMALL_ROWS);

  PrintMaxesAndMins(LargeMatrix,
                    SmallMatrix,
                    ResultMatrix,
                    SMALL_ROWS,
                    SMALL_COLUMNS);

  return 0;
}

Le code imprime toutes les minutes et tous les caractères max pour le numéro de fréquence le plus élevé et le plus bas. Pour ce faire, il conserve un tableau de max et de minutes. Ce tableau ne doit pas être plus long que le produit des côtés de la matrice de résultat.

Si aucun caractère n'apparaît au moins une fois, les valeurs max et min ne seront pas affichées.

Alors que l'OP m'a suggéré de mettre à jour la fonction Count () pour prendre en charge la recherche des lettres les plus fréquentes, cela devient vraiment compliqué, en particulier lorsque vous avez plus d'une lettre se produisant le même nombre de fois dans la fente maximale de dans le min slot.

J'ai donc écrit une nouvelle fonction qui utilise ResultMatrix. ResultMatrix contient déjà les comptages de fréquence. La petite matrice nous indique quelles lettres sont les plus fréquentes.

Ainsi, PrintMaxesAndMins () utilise les entrées de ResultMatrix et de SmallMatrix (appelées Needlestack dans mon code).

Le code pourrait être optimisé pour trouver le min et le max avant de rassembler réellement les caractères qui correspondent au min et les caractères qui correspondent au min. Plutôt que de faire cela, mon code réinitialise la chaîne de caractères max chaque fois qu'il se rend compte qu'un max plus élevé a été trouvé.

Faites-moi savoir si vous avez des questions. Si cela fonctionne pour vous, veuillez accepter la réponse. Passez un excellent week-end!

Voici le code:

$> a.out
P A D A Q E Q B G H R O P H C W S P B Q 
M B R P R N V S C H M U J P W C V M F D 
V W R K E V I Y K K Q Y N H N G V L B Z 

U N T E 
C P G X 
D L A B 

1 3 0 2 
3 5 2 0 
2 1 2 4 

The most repetitive char(s) occurred 5 time(s):  P

The least repetitive char(s) occurred 1 time(s):  U L
Process finished with exit code 0


10 commentaires

Merci (: qu'est-ce que u_int32_t? Puis-je le changer en quelque chose de plus facile?


Vous pouvez l'appeler unsigned int .


J'essaye d'éviter int lorsqu'une valeur ne doit jamais être négative, mais que mon compilateur n'a pas uint . Au lieu de cela, il contient u_int32_t et u_int16_t et ainsi de suite. Je suis sûr que c'est une norme quelque part. Je devrais probablement simplement créer un typedef pour unsigned int.


#include


Mis à jour pour corriger un bogue dans la fonction de recherche ( [j] [j] aurait dû être [i] [j] ), et pour utiliser et uint32_t qui est un entier non signé de 32 bits.


@Gardener Ma conférence veut que le décompte des fonctions soit vide PAS int J'ai essayé de le changer par des pointeurs ... Mais cela ne fonctionne PAS d'idée?


@LinorBenYossef: Bien sûr. Il est facile de simplement passer un pointeur vers la cellule de resultMatrix. J'ai mis à jour le code et corrigé un bug. L'ancien code utilisait une resultMatrix de char. Cependant, la matrice de résultat est en réalité une matrice de uint . Je l'ai modifié pour être une matrice de uint32_t . Problème amusant. Je dois courir à l'église. si vous avez des questions, je ne les verrai probablement pas avant demain. Bonne chance!


J'ai changé le code maintenant quand ** l'exécuter n'affiche qu'un seul résultat et ne vérifie aucun caractère ... Vous pouvez le voir dans le commentaire ci-dessous @Gardener Comment puis-je réparer?


J'ai peur de me rendre à une réunion en ce moment et de ne pas y arriver très bientôt. Quand votre mission est-elle due? Avez-vous un débogueur?


Le code est mis à jour avec le dernier ajout pour rechercher des minutes et des maximums de caractères.



1
votes

Il existe 2 approches à votre problème:

  • vous pouvez écrire 4 boucles imbriquées, en comptant pour chaque cellule de la petite matrice le nombre de fois où la lettre correspondante apparaît dans la grande matrice. cela prendra SIZE * SIZE * ROWS * COLS itérations, potentiellement longtemps.
  • vous pouvez utiliser un tableau de int et compter le nombre d'occurrences de chaque lettre dans la grande matrice par étapes ROWS * COLS , puis calculer le nombre de matrices de résultat par en copiant le nombre approprié du tableau pour chaque cellule de la petite matrice dans les étapes SIZE * SIZE .

Voici un exemple pour la deuxième approche:

// assuming 8-bit chars
void Count(char mat[ROWS][COLS], char smallMat[SIZE][SIZE], int result[SIZE][SIZE]) {
    int count[256] = { 0 };
    int i, j;

    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++)
            *(count + (*(*(mat + i) + j) & 255) += 1;
    }
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++)
            *(*(result + i) + j) = *(count + (*(*(smallMat + i) + j) & 255));
    }
}

L'exigence en utilisant des POINTERS est étrange. La fonction reçoit des pointeurs vers les tableaux d'arguments, je suppose que vous pouvez masquer le code ci-dessus pour utiliser la syntaxe pinter * (p + i) à la place de la syntaxe du tableau p [i] pour répondre à cette exigence. Voici le résultat laid:

// assuming 8-bit chars
void Count(char mat[ROWS][COLS], char smallMat[SIZE][SIZE], int result[SIZE][SIZE]) {
    int count[256] = { 0 };
    int i, j;

    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++)
            count[mat[i][j] & 255]++;
    }
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++)
            result[i][j] = count[smallMat[i][j] & 255];
    }
}


0 commentaires

0
votes

Je veux AJOUTER la fonction VOID * pour montrer à l'utilisateur quel caractère apparaît le PLUS et lequel apparaît 0 fois ** /:

    void Count(const char mat[ROWS][COLS], char c, int *count)
    {
      int i, j;
      int counter = 0; 
      for (i = 0; i < ROWS; i++) {
         for (j = 0; j < COLS; j++) {
              if (mat[i][j] == c)
                counter++;
            }
           *count = counter;
  if(counter>max)
      counter=max;
  else
      counter=min;
  }
  if(count==max)
     printf("Most repetitive: %c %d times", c,counter);
  if(count==min)
     printf("Most repetitive: NO COMMON LETTERS (max = 0)");

}

Cela devrait ressembler à ceci: Le plus répétitif: PAS DE LETTRES COMMUNES (max = 0) Matrice de résultat: 1 3 0 2 3 4 2 0 2 1 2 4 1 0 3 3 Le plus répétitif: P ... 4 fois


4 commentaires

Vous devez passer Smallmat [i] [j] au lieu de smallmat [SIZE] [SIZE] pour compter la fonction


Ein perle ma. Bonne chance


J'ai changé la question de la fonction ... Je la supprime ... @ sergeyrar @David C. Ranki


Je vous remercie. Il est possible de copier / coller le texte de sortie, évitez simplement de prendre une capture d'écran.



1
votes

Si vous avez encore du mal à choisir l'approche à adopter, un bon point de repère à comparer est simplement la simple approche par force brute. Bien qu'il existe généralement plusieurs façons d'assembler les choses et qu'il y ait généralement des gains d'efficacité, l'approche par force brute est généralement la plus facile à comprendre. Cela consiste simplement à boucler sur chaque caractère de small , puis à boucler sur chaque caractère de votre grand tableau et avoir mis à zéro le résultat simplement incrémenter l'index dans result chaque fois que le caractère de small correspond à big .

L'approche à 4 boucles ne nécessite rien de plus que de garder une trace de l'index actuellement comparé et qui est incrémenté. Dans ce cas, les index pour small et result se correspondent et vous utilisez simplement deux index supplémentaires pour parcourir big , par exemple p>

$ ./bin/bigsmallfreq <dat/bigmtrxltrs.txt
Big Matrix

 P A D A Q E Q B G H R O P H C W S P B Q
 M B R P R N V S C H M U J P W C V M F D
 V W R K E V I Y K K Q Y N H N G V L B Z

Small Matrix

 U N T E
 C P G X
 D L A B

Result Matrix

 1 3 0 2
 3 5 2 0
 2 1 2 4

À ce stade, votre matrice de résultat est remplie.

Le reste est assez simple. La seule vraie tâche qui reste est de lire big à partir de votre fichier d'entrée (ou stdin ). L'approche simple ici, étant donné le format de big est de lire chaque caractère d'entrée comme un caractère et de simplement tester isalpha (c) (ou isupper (c) si vous le souhaitez). Stockez simplement les caractères alpha, en ignorant le reste, mais en gardant une trace des '\ n' et EOF rencontrés pour mettre à jour / réinitialiser les compteurs nécessaires. Votre lecture pourrait être:

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

#define ROW  3
#define COL  20
#define SIZE 4

#define CHARSET 62

/* fill result count from chars in arr matching small */
void count (char big[ROW][COL], int row, int col, char (*small)[SIZE],
            int rowsm, int (*result)[SIZE])
{
    for (int i = 0; i < rowsm; i++)             /* for each row in small */
        for (int j = 0; j < SIZE; j++)          /* for each col in small */
            for (int k = 0; k < row; k++)       /* for each row in big */
                for (int l = 0; l < col; l++)   /* for each col in big */
                    if (small[i][j] == big[k][l])   /* does small == arr? */
                        result[i][j]++;         /* increment result */
}

/* simple zero VLA */
void zerovla (int rowsm, int (*result)[SIZE])
{
    for (int i = 0; i < rowsm; i++)
        for (int j = 0; j < SIZE; j++)
            result[i][j] = 0;
}

/* print char array */
void prncharray (int row, int col, char (*arr)[col])
{
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            putchar (' ');
            putchar (arr[i][j]);
        }
        putchar ('\n');
    }
}

/* print int array */
void prniarray (int row, int col, int (*arr)[col])
{
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++)
            printf (" %d", arr[i][j]);
        putchar ('\n');
    }
}

int main (int argc, char **argv) {

    char arr[ROW][COL] = {{0}},                     /* big matrix */
        small[][SIZE]  = {{ 'U', 'N', 'T', 'E' },   /* small matrix */
                          { 'C', 'P', 'G', 'X' },
                          { 'D', 'L', 'A', 'B' }};
    int c = 0,          /* to read chars from file into big mtrx */
        rdx = 0,        /* row index */
        cdx = 0,        /* col index */
        colmax = 0,     /* max col found per-row */
        rowsm = sizeof small / sizeof *small,   /* rows in small */
        result[rowsm][SIZE];    /* result matrix */
    /* use filename provided as 1st argument (stdin by default) */
    FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;

    if (!fp) {  /* validate file open for reading */
        perror ("file open failed");
        return 1;
    }

    zerovla (rowsm, result);    /* zero elements in result */

    while (c != EOF) {  /* while not end of file */
        /* while index < row and char not '\n' or EOF */
        while (rdx < ROW && (c = fgetc (fp)) != '\n' && c != EOF)
            if (isalpha (c))            /* if it's a letter */
                arr[rdx][cdx++] = c;    /* store it in big */
        if (!cdx && (c == '\n' || c == EOF))    /* if end of line/file */
            break;                              /* break */
        if (!colmax)            /* if colmax not set */
            colmax = cdx;       /* set with no. cols from 1st row */
        if (cdx != colmax) {    /* validate remaining rows have same cols */
            fputs ("error: row with unuequal columns.\n", stderr);
            return 1;
        }
        rdx++;      /* increment row index  */
        cdx = 0;    /* reset col index zero */
    }
    if (fp != stdin) fclose (fp);   /* close file if not stdin */

    count (arr, rdx, colmax, small, rowsm, result); /* count/fill result */

    puts ("Big Matrix\n");              /* output all matricies */
    prncharray (rdx, colmax, arr);
    puts ("\nSmall Matrix\n");
    prncharray (rowsm, SIZE, small);    
    puts ("\nResult Matrix\n");
    prniarray (rowsm, SIZE, result);

    return 0;
}

En résumé, vous pourriez faire quelque chose de similaire à:

int main (int argc, char **argv) {

    char arr[ROW][COL] = {{0}},                     /* big matrix */
        small[][SIZE]  = {{ 'U', 'N', 'T', 'E' },   /* small matrix */
                          { 'C', 'P', 'G', 'X' },
                          { 'D', 'L', 'A', 'B' }};
    int c = 0,          /* to read chars from file into big mtrx */
        rdx = 0,        /* row index */
        cdx = 0,        /* col index */
        colmax = 0,     /* max col found per-row */
        rowsm = sizeof small / sizeof *small,   /* rows in small */
        result[rowsm][SIZE];    /* result matrix */
    /* use filename provided as 1st argument (stdin by default) */
    FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;

    if (!fp) {  /* validate file open for reading */
        perror ("file open failed");
        return 1;
    }

    zerovla (rowsm, result);    /* zero elements in result */

    while (c != EOF) {  /* while not end of file */
        /* while index < row and char not '\n' or EOF */
        while (rdx < ROW && (c = fgetc (fp)) != '\n' && c != EOF)
            if (isalpha (c))            /* if it's a letter */
                arr[rdx][cdx++] = c;    /* store it in big */
        if (!cdx && (c == '\n' || c == EOF))    /* if end of line/file */
            break;                              /* break */
        if (!colmax)            /* if colmax not set */
            colmax = cdx;       /* set with no. cols from 1st row */
        if (cdx != colmax) {    /* validate remaining rows have same cols */
            fputs ("error: row with unuequal columns.\n", stderr);
            return 1;
        }
        rdx++;      /* increment row index  */
        cdx = 0;    /* reset col index zero */
    }
    ...

Exemple d'utilisation / Output

/* fill result count from chars in arr matching small */
void count (char big[ROW][COL], int row, int col, char (*small)[SIZE],
            int rowsm, int (*result)[SIZE])
{
    for (int i = 0; i < rowsm; i++)             /* for each row in small */
        for (int j = 0; j < SIZE; j++)          /* for each col in small */
            for (int k = 0; k < row; k++)       /* for each row in big */
                for (int l = 0; l < col; l++)   /* for each col in big */
                    if (small[i][j] == big[k][l])   /* does small == arr? */
                        result[i][j]++;         /* increment result */
}

Regardez les choses et faites-moi savoir si vous avez d'autres questions.


0 commentaires