Boa Noite!
Preciso fazer um código onde eu preencho uma matriz com valores do tipo char e conto o número de ocorrências de cada caractere que aparece na matriz. Após a contagem, tenho que listar cada caractere digitado e o número de ocorrências;
EX: digitei: "a, s, d, a, a, s"
o código deverá imprimir:
"a quantidade: 3
s quantidade: 2
d quantidade: 1"
Fiz o código abaixo mas não imprime corretamente, pois ele imprime da seguinte forma:
"a quantidade: 1"
"a quantidade: 2"
"a quantidade: 3"
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include <string.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
// Declaração de Variáveis.
int m = 0, n = 0, mi[10][10], mai[10][10];
char mxn[10][10], c;
int contl, contc, contl2, contc2;
// Povoando matrizes "mi" e "mai" com "0" em todas as posições
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
mi[i][j] = 0;
mai[i][j] = 0;
}
}
// Usuário define o tamanho da matriz "mxn".
while ((m < 1) || (m > 10))
{
printf("Digite a dimensão da matriz M: \n");
scanf_s("%d", &m);
while ((c = getchar()) != '\n' && c != EOF) {}
}
while ((n < 1) || (n > 10))
{
printf("Digite a dimensão da matriz N: \n");
scanf_s("%d", &n);
while ((c = getchar()) != '\n' && c != EOF) {}
}
// Povoa a matriz até o tamanho definido pelo usuário.
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
printf("Digite o elemento para [%d,%d]: \n", i, j);
mxn[i][j] = getchar();
while ((c = getchar()) != '\n' && c != EOF) {}
}
}
//testar
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
putchar(mxn[i][j]);
}
printf("\n");
}
//Armazenamento de números de ocorrências.
for (contl = 0; contl <= m; contl++)
{
for (contc = 0; contc <= n; contc++)
{
for (contl2 = 0; contl2 <= m; contl2++)
{
for (contc2 = 0; contc2 <= n; contc2++)
{
//Se achar um valor igual a outro e que não foi contado na matriz marca o valor como contado e soma.
if ((mxn[contl][contc] == mxn[contl2][contc2]) && (mi[contl][contc] == 0))
{
//Marca o valor
mi[contl2][contc2] = 1;
//Soma 1 na primeira posição que aparece o valor.
mai[contl][contc]++;
}
}
}
}
}
//Impressão dos valores finais.
for (contl = 0; contl < m; contl++)
{
for (contc = 0; contc < n; contc++)
{
//Se a quantidade for maior ou igual a 1, imprime a quantidade na tela.
if (mai[contl][contc] >= 1)
{
printf("%c\t", mxn[contl][contc]);
printf("Quantidade: ");
printf("%d\n", mai[contl][contc]);
}
}
}
system("pause");
return 0;
}