Manipulación de cadenas y estructuras de datos en C: Listas y Tablas
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 21,82 KB
Int contar (char frase [80])
//devuelve El número de veces que aparece la letra 'a' en la frase
{
int i=0;
int cont=0;
while (i< strlen (frase))
{
if (frase[i]=='a')
cont = cont+1;
i=i+1;
}
return Cont;
}
Void extraer_texto (char mensaje [80])
/* Recibe Un mensaje con el formato: 3/Nombre:Texto
* Escribe el la pantalla la frase: "Nombre ha enviaso el siguiente mensaje: Texto"
*/
{
char texto [80];
char nombre [10];
char *p;
char m[80];
strcpy (m, mensaje);
p= strtok (m,":");
sscanf (p,"3/%s",nombre);
printf ("%s\n",nombre);
p=strtok (NULL, ":");
sscanf (p,"%s",texto);
printf ("%s ha enviado el siguiente Mensaje: ",nombre);
// para escribir el texto:
puts (p);
}
Void construir_mensaje (char mensaje [80])
/* Lee Del teclado un nomnbre y un texto y construye el mensaje:
* 3/Nombre:Texto
*/
{
char nombre [10];
char texto[80];
printf ("Escribe el nombre y el texto : \n");
scanf ("%s", nombre);
gets (texto); //Aquí lee toda la frase Hasta el final
sprintf (mensaje, "3/%s:", Nombre);
strcat (mensaje, texto);
}
Int contar_palabras (char texto [80])
/* Devuelve el número de palabras que hay en el texto con más
* de tres caracteres
*/
{
int cont=0;
char *p;
char t[80];
strcpy (t,texto);
p=strtok (t," ");
while (p!=NULL)
{
if (strlen (p) >3)
cont=cont+1;
p=strtok (NULL," ");
}
return Cont;
}
Listas
Ejercicio 1
Int anadir_usuarios (Tlista *l, char Mensaje[80])
/* recibe Como parámetro un mensaje con el siguiente
* formato: "Código*nombre,Código*nombre,..."
* Y añade al lista cada uno de los usuarios del Mensaje, si no
* está ya en la lista.
* Devuelve el numero de usuarios añadidos.
*/
{
char lista [80];
char *p;
Tusuario t;
int cont=0;
strcpy (lista, mensaje);
p = strtok( lista, ",");
sscanf (p,"%d*%s", &t.Código,t.Nombre); //separamos el código y el nombre
if (buscar (t.Nombre, *l)==-1)
{
pon_usuario (l,t);
cont=cont+1;
}
p = strtok( NULL, ",");
while ( p != NULL )
{
sscanf (p,"%d*%s", &t.Código,t.Nombre); //separamos el código y el nombre
if (buscar (t.Nombre, *l)==-1)
{
pon_usuario (l,t);
cont=cont+1;
}
p = Strtok( NULL, ",");
}
return Cont;
}
Int pon_usuario (Tlista *l, Tusuario u)
/* Añade El usuario u al final de la lista.
* Devuelve 0 si todo bien y -1 si no hay Espacio en la lista
*/
{
if (l->num==MAX)
return -1;
else
{
L->usuarios[l->num]=u;
L->num=l->num+1;
return 0;
}
Void escribir_lista (Tlista l)
// Escribe en pantalla todos los usuarios de la lista
{
printf ("Lista de usuarios:\n");
int i=0;
while (i<l.Num)
{
printf ("Nombre: %s, código %d\n", l.Usuarios[i].Nombre, l.Usuarios[i].Código);
i=i+1;
}
printf ("\n\n");
}
int eliminar (int i,
Tlista *l)
/* Elimina de la lista el usuario que ocupa la posición i
* Devuelve 0 si ok y -1 si no hay usuario en La posición i
*/
{
int j;
if (i>= MAX)
return -1;
else
{
j=i;
while (j< l->num-1)
{
L->usuarios[j]= l-> Usuarios[j+1];
j=j+1;
}
L->num=l->num-1;
return 0;
}
}
Int buscar (char nombre[10], Tlista l)
/* Devuelve la posición que ocupa en la lista el usuario cuyo nombre se recibe
* como parámetro. Si el usuario no está en la Lista devuelve un -1
*/
{
int encontrado = 0;
int i=0;
while ((i<l.Num) &&(!Encontrado))
{
if (strcmp (l.Usuarios[i].Nombre, Nombre)==0)
encontrado = 1;
if (!Encontrado)
i=i+1;
}
if (encontrado)
return I;
else
return -1;
}
void construir_lista (Tlista l, char
Mensaje[80])
/* Construye un mensaje de texto con los nombre de los usuarios que
hay en la lista l, separados por una coma */
{
int i=1;
strcpy (mensaje, l.Usuarios[0].Nombre);
while (i<l.Num)
{
sprintf (mensaje, "%s,%s",mensaje,l.Usuarios[i].Nombre);
i=i+1;
}
}
Tablas
Ejercicio 1
int construir_frase (Ttabla t, char frase
[80])
/* Construye una frase que contiene todos los nombre
* de los elementos de la tabla cuyo Identificador es par.
* Los nombres aparecerán en la frase sepadados
* por comas. La función retorna el número de Nombres que tiene la frase.
*/
{
int i;
int cont=0;
for (i=0; I<MAX; i++)
if (t[i].Id %2 ==0)
{
cont = cont+1;
sprintf (frase, "%s,%s", frase,t[i].Nombre);
}
return Cont;
}
Ejercicio 2
int buscar_posicion (Ttabla t, char nombre
[10])
/* Devuelve la posición que ocupa en la tabla el elemento cuyo
* nombre se recibe como parámetro
* Si no lo encuentra devuelve un -1
*/
{
int Encontrado = 0;
int i=0;
while ((i<MAX) && ! Encontrado)
{
if (strcmp (t[i].Nombre,nombre) == 0)
encontrado = 1;
if (!Encontrado)
i=i+1;
}
if (encontrado)
return i;
else
return -1;
}
void escribir_posiciones (Ttabla t, char
Frase[80])
/* Recibe La tabla y una frase que contiene nombres
* Separados por ,. El procedimiento escribe en pantalla las posiciones en las que Está
* cada Uno de los elementos cuyo nombre aparece en la frase.
*/
{
char aux [80];
char nombre [10];
char *p;
int pos;
strcpy (aux, frase); //para poder usar Strtok hay que hace una copia de la frase
p = strtok( aux, ",");
while ( p != NULL )
{
sscanf (p,"%s", nombre); //obtenemos el siguiente nombre
pos= buscar_posicion (t,nombre); //buscamos el nombre en la tabla
if (pos !=-1)
printf ("%s está en la Posición %d\n", nombre, pos);
else
printf ("%s no está en la Tabla\n", nombre);
p = strtok( NULL, ","); // Vamos a por el siguiente nombre
}
}
void escribir_tabla (Ttabla t)
/* Escribe en pantalla los datos de los elemmentos de la tabla
*/
{
int i;
printf ("Contenido de la Tabla:\n");
for (i=0; i<MAX; i++)
if (t[i].Id !=-1)
printf ("Nombre: %s, Id: %d\n", t[i].Nombre, t[i].Id);
}
int pon_elemento (Ttabla t, Telemento e)
/* Busca Un sitio libre en la tabla y coloca allí el elemento
* Retorna 0 si oK y -1 si la lista está llena
*/
{
int Encontrado = 0;
int i=0;
while ((i<MAX) && ! Encontrado)
{
if (t[i].Id == -1)
encontrado = 1;
if (!Encontrado)
i=i+1;
}
if (encontrado)
{
t[i]=e;
return 0;
}
else
return -1;
}
int eliminar (Ttabla t, char nombre [10])
/* Elimina de la tabla el usuario cuyo nombre se recibe como parámetro
* Devuelve 0 si Ok y -1 si el usuario no está En la lista
*/
{
int Encontrado = 0;
int i=0;
while ((i<MAX) && ! Encontrado)
{
if (strcmp (t[i].Nombre,nombre) == 0)
encontrado = 1;
if (!Encontrado)
i=i+1;
}
if (encontrado)
{
t[i].Id=-1;
return 0;
}
else
return -1;
}