Saltar ao contido

C/Funcións para traballar con estruturas

En Galilibros, o Wikibooks en galego.
< C
C
Funcións para traballar con estruturas


Buscar por nome

[editar]

A seguinte función permite buscar unha estrutura cun campo cunha matriz de caracteres (cadea de caracteres) co texto especificado na chamada.

// Imaxinemos que previamente se declara un tipo de estrutura que contén unha matriz de caracteres
// chamada "nome", e que na chamada á función se lle fornecen a primeira cela dunha matriz do
// tipo de dita estrutura (ficha), a extensión de dita matriz de estruturas e mais a cadea de texto
// a buscar.

signed short int BuscarEstrutura(struct ficha *matriz, unsigned short int extension, char *nome)
{
  // Declaración de variables
  unsigned short int i; // Índice, do mesmo tipo que "extension" por eficiencia.
  
  for(i=0;i<extension;i++)
    if(strcmp(matriz[i].nome,nome)==0) return i; // Se atopa unha coincidencia, devolve a súa posición

  return -1; // En caso de que non atopase nada, devolve -1
}

Ordenar alfabeticamente

[editar]

A seguinte función permite ordenar alfabéticamente os elementos dunha matriz de estruturas segundo unha das variables da estruturas, que sirva para almacenar unha cadea de caracteres (unha matriz).

// Imaxinemos que antes desta función se declarou unha estrutura que ten unha
// cadea de caracteres, "nome"
	
void OrdenarAlfabeticamente(struct ficha *matriz, unsigned short int extension)
{
  // Declaración de variables
  unsigned short int minimo,i,l; // Índices, do mesmo tipo que "extensión" por eficiencia.
  struct ficha auxiliar;
  
  for(i=0;i<extension-1;i++)
  {
    // Establécese inicialmente o primeiro nome sen ordenar coma o primeiro (alfabeticamente).
    minimo=i;
    
    // Búscase cal é realmente o primeiro nome alfabeticamente.
    for(l=i+1;l<extension;l++)
    {
      if(strcmp(matriz[minimo].nome,matriz[l].nome)<0) minimo=l;
    }

    // Intercámbianse os valores da cela actual da matriz
    // e da cela coa cadea de texto que vai antes alfabeticamente.
    // Faise mesmo no caso de que a cela actual da matriz
    // sexa a mesma que a primeira alfabéticamente.
    
    auxiliar=matriz[i];
    matriz[i]=matriz[minimo];
    matriz[minimo]=auxiliar;
  }
}

Cómpre boterlle unha ollada á páxina sobre a función strcmp, pois hai que comprender o seu funcionamento, e mailas súas limitacións. Por exemplo, salienta o feito de que só funciona para ordenar cadeas de caracteres anglosaxóns, é dicir, nada de ñ ou tiles.


C
Funcións para traballar con estruturas