Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ordenação de palavras em uma frase por tamanho das palavras.
- // José Anilto dos Anjos - 27/09/2020
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main () {
- char frase[100]; // vetor para conter a frase
- char aux[100]; // vetor auxiliar (substituir por pilha)
- int lim = 0; // guardar o tamanho da frase
- int ini = 0;
- int fim = 0;
- int tam = 0;
- int qtd = 0;
- int mat[100][3];
- int ind = 0;
- scanf(" %[^\n]",frase); // lê a frase com espaços
- lim = strlen(frase); // calcula o tamanho da frase lida
- printf("\n%s \n", frase);
- // separa palavras
- for (int i=0; i <= lim; i++) {
- aux[i] = frase[i];
- if (frase[i] == ' ' || i == lim) {
- fim = i;
- tam = fim - ini;
- mat[ind][0] = ini;
- mat[ind][1] = fim;
- mat[ind][2] = tam;
- printf("\n de %d a %d - tam = %d: ", mat[ind][0], mat[ind][1] - 1, mat[ind][2]);
- ind++;
- qtd++;
- for (int j=ini; j<fim; j++) { printf("%c", aux[j]); }
- ini = i + 1;
- }
- }
- printf("\n Total de palavras: %d", qtd);
- // ordenar por tamanho (selection sort)
- int si, sj, smin, sswap, sswap1, sswap2;
- for (si = 0; si < qtd - 1; si++) {
- smin = si;
- for (sj = si+1; sj < qtd; sj++) {
- if(mat[sj][2] < mat[smin][2]) { smin = sj; } // inverter aqui para ordem crescente ('>' para '<'
- }
- if (si != smin) {
- sswap = mat[si][0]; mat[si][0] = mat[smin][0]; mat[smin][0] = sswap;
- sswap1 = mat[si][1]; mat[si][1] = mat[smin][1]; mat[smin][1] = sswap1;
- sswap2 = mat[si][2]; mat[si][2] = mat[smin][2]; mat[smin][2] = sswap2;
- }
- }
- // mostrar as palavras ordenadas
- printf("\n Ordem decrescente:\n");
- for (int i=0; i< qtd; i++) {
- for (int j = mat[i][0]; j < mat[i][1]; j++ ) { printf("%c",frase[j]); }
- printf("\n");
- }
- // loop para ler o vetor auxiliar. Aqui pode substituir pela leitura da pilha (pop)
- printf("\n Frase original:\n");
- for (int j=0; j<lim; j++) { printf("%c", aux[j]); }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement