CADENAS 329 CAPÍTULO 14 CADENAS EJEMPLO 141 STATIC

CADENAS 329 CAPÍTULO 14 CADENAS EJEMPLO 141 STATIC
CADENAS DE CARACTERES 1 DEFINICÓN ES UNA SECUENCIA DE
CADENAS DE MARKOV MÁS EJERCICIOS EJERCICIO 43 EN UNA

CONCHA GÓMEZ CADENAS ENFERMERA CS MONREAL DEL CAMPO (TERUEL)
MANIPULACIÓN DE CADENAS RESUMEN DE PALABRAS CLAVE ACCIÓN
MANUAL DE USUARIO CARRETILLA TRANSPORTADORA DE CADENAS

CAPÍTULO 9

Cadenas 329

Capítulo 14


CADENAS

EJEMPLO 14.1


static char cadena [] = "Cadena estática";

char *cadena2;


cadena2 = (char*) malloc (strlen(cadena) + 1);

strcpy (cadena2, cadena);

EJEMPLO 14.2


char entrada[40];

char *ptrchar;


printf ("Introduzca una cadena de caracteres: ");

ptrchar = gets (entrada);


printf ("\n Esta es la cadena introducida: ");

for (; *ptrchar != '\0'; ptrchar++)

putchar (*ptrchar);


puts ("\n Presione una tecla para terminar");

getch ();



EJEMPLO 14.3


#include <stdio.h>

#include <string.h>

void main()

{

char cad[81], *a;

int i, n;

puts ("Introduce líneas, separando las palabras con blancos.\n ");

a = gets (cad);

while (a != NULL)

{

n = 0;

for (i = 0; i < strlen(cad); i++)

if (cad[i] == ' ') n++; /* también se accede a los char con *(cad+i) */

if (i > 0) ++n;

printf ("Número de palabras: %d \n", n);

a = gets (cad);

}

}



Ejemplo 14.4


char *c = " -49 2332";

char **pc = (char**) malloc(1);

long n1;

unsigned long n2;

n1 = strtol (c,pc,0);

printf (" n1 = %ld\n", n1);

printf (" cadena actual %s\n", *pc);

c = *pc;

n2 = strtoul (c, pc, 10);

printf (" n2 = %lu", n2) ;

Ejemplo 14.5


#include <stdio.h>

#include <errno.h>

#include <stdlib.h>


void main (void)

{

char*c = "333.55553 444444.2 3e+1221";

char **a;

double v=0 ;


a = (char**) malloc(1);

v = strtod (c, a);

if (errno != 0)

{

printf ("Error \"%d\" al convertir la cadena.", errno);

exit (-1);

}


printf ("c = [%s], v = %lf\n", c, v);

while ((**a) != '\0')

{

c = *a;

v = strtod (c, a);

if (errno != 0)

{

printf ("Error \"%d\" al convertir la cadena.", errno);

exit(-1);

}

printf("c = [%s], v = %lf\n", c, v);

}

}



EJERCICIOS


14.1

strcpy (cd, “Asigna cadena”);


14.2


int i;

char asignatura [N][20], codigo [N][6];


for (i = 0; i<= N; i++)

{

printf ("\n\tEscriba el nombre de la asignatura: ");

gets (asignatura [i]);

printf ("\n\tEscriba el código de la asignatura: ");

gets (codigo [i]);

}



14.3


scanf( ) limita las variables que reconoce en la entrada por medio de los espacio en blanco que las separan, por lo tanto no es capaz de reconocer una línea que contenga espacios en blanco, porque para esta función cada palabra es una cadena diferente. Por lo tanto si queremos leer una cadena de caracteres que contenga espacios en blanco ha de hacerse con gets( ). Por otro lado gets( ) tiene el peligro de que aparentemente tiene un uso más sencillo que scanf( ) pero si no se le proporciona una cadena de caracteres como argumento puede que no almacene correctamente la entrada.



14.4


leerTexto (char**texto, int nlineas)

{

int i;

char buffer [80];


texto = (char**) malloc (nlineas * sizeof (char*));

for (i=0; i < nlineas ; i++)

{

gets (buffer);

texto [i] = (char*) malloc ((strlen (buffer ) +1) * sizeof (char));

strcpy (texto [i], buffer);

}

}

14.5

cuentaLetras ( char* cadena, int *vocales, int *consonantes, int *digitos)

{

char* p = cadena;


while (*p != '\0')

{

if ((*p >= 'a' && *p <= 'Z') || ((*p >= 'a' && *p <= 'z'))

switch (*p)

{

case 'a': case 'A':

case 'e': case 'E':

case 'i': case 'I':

case 'o': case 'O':

case 'u': case 'U': (*vocales)++;

default : (*consonantes)++;

}

if (*p >= '0' && *p <= '9') (*digitos)++;

p++;

}

}



14.6


La variable c1 es un puntero que puede apuntar a un puntero a caracteres, pero no esta inicializado con una dirección válida. La variable c2 es un array de 10 punteros a caracteres, pero estos 10 punteros no apuntan a ningún dato válido. La variable c3 es una matriz con espacio para 210 punteros a caracteres no inicializados accesibles según un arreglo de 10 filas de 21 elementos cada una de ellas.


14.7


char*gets2 ( char* cadena)

{

char c, *p = cadena;


while ((( c = getchar( )) != EOF) || (c == '\n'))

*p++ = c;

*p = '\0';

return cadena;

}



14.8


char* lee_linea(char*c, int n)

{

char ch, *cc = c;


if (( ch = getchar( )) == EOF) return (EOF);

else *cc++ = ch;

while ((( ch = getchar( )) != '\n') || (cc - c < n))

*cc++ = ch;

*cc = '\0';

return c;

}



14.9

main( )

{

char *texto[60];

int i, lmax, posmax, lmin, posmin;

char buffer [80];


for (i=0; i < 60 ; i++)

{

gets (buffer);

if ( strlen (buffer) == 0) break;

if (strlen (buffer) < lmin)

{

posmin = i;

lmin = strlen (buffer);

}

if (strlen (buffer) > lmax)

{

posmax = i;

lmax = strlen (buffer);

}

texto [i] = (char*) malloc ((strlen (buffer ) +1) * sizeof (char));

strcpy (texto [i], buffer);

}

strcpy (buffer, texto[posmin]);

strcpy (texto[posmin], texto[posmax]);

strcpy (texto[posmax], buffer);

}


14.10


main( )

{

char cad[80];

char*separador = " ";

char*ptr = cad;


gets (cad);

printf("\n%s\n",cad);

ptr = strtok(cad, separador);

printf("\tSe rompe en las palabras");

while (ptr)

{

printf("\n%s",ptr);

ptr = strtok(NULL, separador);

}

}


14.11

main( )

{

char* texto[30], buffer [80], clave[15];

int i, veces, *ptr;


puts (“ Introduzca la palabra clave a buscar: “);

gets (clave);

for (i=0; i < 30 ; i++)

{

gets (buffer);

texto [i] = (char*) malloc ((strlen (buffer ) +1) * sizeof (char));

strcpy (texto [i], buffer);

ptr = texto[i];

while ((ptr = strstr (ptr, clave)) != NULL) veces++;

}

printf (“La palabra clave %s aparece %d veces en el texto.\n”, clave, veces);

}

14.12


main( )

{

char* texto[40], buffer [80];

int i, longlin[40][2];


puts (“ Introduzca el texto línea a línea. \n “);

for (i=0; i < 40 ; i++)

{

gets (buffer);

texto [i] = (char*) malloc ((strlen (buffer ) +1) * sizeof (char));

strcpy (texto[i], buffer);

longlin [i][0] = strlen (buffer ) +1;

longlin [i][1] = i;

}

ordenar (longlin);

for (i=0; i < 40 ; i++)

puts (texto[ longlin[i]]);

}


14.13

main( )

{

char* texto[100], buffer [80], palabras[28][20], *ptr;

int i, j;


puts (“ Introduzca el texto línea a línea. \n “);

for (i=0; i < 100 ; i++)

{

gets (buffer);

texto [i] = (char*) malloc ((strlen (buffer ) +1) * sizeof (char));

strcpy (texto[i], buffer);

ptr = strtok(texto[i], “ “);

j = 0;

while (ptr)

{

strcpy (palabras [j++], ptr);

ptr = strtok(NULL, “ “);

}

ordenar (palabras);

for (i=0; i < 28 ; i++)

{

puts ( palabras[i]);

palabras[0] = ‘\0’;

}

}

}


14.14

main( )

{

char* texto[100], buffer [80], palabras[28][20], *ptr;

int i, j;


puts (“ Introduzca el texto línea a línea .\n “);

for (i=0; i < 30 ; i++)

{

gets (buffer);

texto [i] = (char*) malloc ((strlen (buffer ) +1) * sizeof (char));

strcpy (texto[i], buffer);

}

ordenar (texto);

for (i=0; i < 30 ; i++)

puts (buffer);

}


14.15


main( )

{

char* texto[100], buffer [80], *ptr;

int i, kilos, suma;


puts (“ Introduzca el texto línea a línea. \n “);

for (i=0; i < 100 ; i++)

{

gets (buffer);

texto [i] = (char*) malloc ((strlen (buffer ) +1) * sizeof (char));

strcpy (texto[i], buffer);

ptr = strtok(texto[i], “ “);

j = 0;

while (ptr)

{

if ((kilos = atoi (ptr)) != 0)

suma += kilos;

ptr = strtok(NULL, “ “);

}

printf ("La suma total de los kg. recogidos es de %d\n", suma );

}

}



14.16

main( )

{

char *texto[50], buffer[80], clave[15];

int i;


puts (“ Introduzca la palabra clave a buscar: “);

gets (clave);

for (i=0; i < 50 ; i++)

{

gets (buffer);

texto [i] = (char*) malloc (strlen (buffer)+1));

if (strstr (buffer, clave) == NULL)

strcpy (texto [i], buffer);

}

}


14.17

char* leerGrandes (char* num1, char* num2)

{

/* para alinear los números damos la vuelta a las cadenas

487954558 855459784

+ 235869 + 968532

------------ -------------

488190427 724091884

así podemos sumar los dígitos en el sentido del array */

char* rnum1, * rnum2, *result;

int i, mayor;


rnum1 = strrev (num1);

rnum2 = strrev (num2);

mayor = strlen (num1) > strlen (num2) ? strlen (num1) : strlen (num2);

result = (char*) malloc ((mayor +2) * sizeof (char));

for (i=0; i<=mayor; i++)

result[i] = *rnum1++ + *rnum2++;

for (i=0; i<=mayor; i++) /* cálculo del arrastre */

if (result[i] > 10)

{

result[i+1] += (int) result[i] / 10;

/* división entera */

resutl[i] %= 10;

}

return (strrev (result));

}


14.18


main( )

{

char* texto[100], buffer [80], *ptr;

int i, j, mayor;


puts (“ Introduzca el texto linea a linea.\n “);

for (i=0; i < 100 ; i++)

{

gets (buffer);

texto [i] = (char*) malloc (80 * sizeof (char));

strcpy (texto[i], buffer);

if (mayor < strlen (buffer))

mayor = strlen (buffer);

}

/* rellenado con blancos */

for (i=0; i < 100 ; i++)

{

for (j= strlen (texto[i]); j <mayor; j++)

*(texto[i] + j) = ' ';

texto[i][mayor+1] = '\0';

}

}


14.19


main( )

{

char cad1[40], cad2[40];

char* ptr1 = cad1, *ptr2 = cad2;

int letras1[28], letras2[28], i;


gets (cad1);

cad1 = tolower (cad1);

gets (cad2);

cad2 = tolower (cad2);

for (i=0; i < strlen(cad1); i++)

{

if (alpha (cad1[i]))

letras1[cad1[i] - 'a']++;

if (alpha (cad1[i]))

letras1[cad1[i] - 'a']++;

}

for (i=0; i < strlen(28); i++)

if (letras1[i] != letras2[i])

puts ("Las cadenas introducidas no son anagramas. \n");

puts ("Las cadenas introducidas son anagramas. \n");

}



VULNERABILIDAD DE LAS CADENAS DE ABASTOS DE ALIMENTO EN


Tags: cadenas 329, ("las cadenas, cadenas, static, capítulo, ejemplo