You are on page 1of 12

UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA ESCUELA DE INGENIERA DE SISTEMAS INFORMTICOS PROGRAMACIN I Ciclo II_2012

GUIA DE LABORATORIO N 4 Funciones de Cadenas de Caracteres Objetivo: Aprender a trabajar con cadenas de caracteres (string) y a manipular las funciones de cadenas contenidas en las libreras de cabecera que acompaan al compilador del Lenguaje de Programacin C. Contenido: Parte I: Programas sin errores Parte II: Programas con errores para corregirlos Parte III: Ejercicios propuestos

Metodologa de Trabajo: Semana 1: El estudiante trabaja los programas que el instructor le indique: uno de la Parte I (digitar y ejecutar); dos de la Parte II (digitar, depurar y ejecutar). El estudiante debe de subir sus archivos en los ltimos 15 minutos de su prctica. El instructor indica tres ejercicios de tarea para la prxima semana, de la Parte III. Semana 2: El estudiante sube su tarea en los 10 primeros minutos al aula virtual El instructor indica 3 ejercicios de la Parte III, para que sean resueltos en el laboratorio. El estudiante debe de subir sus archivos en los ltimos 15 minutos de su prctica.

MRC-JMB-2012

Pgina 1

PARTE I:

Programas sin errores

El estudiante debe digitar y probar los siguientes programas: Programa 1. Este programa, lee una cadena de caracteres y el usuario elige un carcter para ser sustituido por otro, que tambin es el usuario quien lo indica. Gurdelo en memoria como g4_pr1.cpp //Sustituye un caracter de una cadena, por otro. Previamente se lee la cadena //El carcter a eliminar o sustituir y el nuevo a ubicar tambin se leen. #include <conio.h> #include <stdio.h> #include <string.h> main() { char cadena[150], c, r; int i; puts("Digite la cadena a trabajar: "); gets(cadena); puts("\nDigite el caracter que vamos a reemplazar o eliminar: "); c=getche(); printf("\n\nDigite caracter de reemplazo: "); r=getche(); for (i=0;i<=strlen(cadena);i++) { if (c==cadena[i]) cadena[i]=r; } printf("\n\n La nueva cadena es:\n\t\t "); puts(cadena); getch(); return 0; }

Programa 2: Este programa lee dos palabras por separado, e imprime la de menos caracteres en minsculas y en maysculas la ms larga; si las cadenas son de la misma longitud solamente lo indica mediante el mensaje: las cadenas son iguales. Guarde como g4_pr2.cpp

MRC-JMB-2012

Pgina 2

//Compara dos palabras #include <stdio.h> #include <conio.h> #include <string.h> main() { char s1[30]="\0", s2[30]="\0"; int c1,c2; fflush(stdin); puts("digite la primera palabra"); gets(s1); c1=strlen(s1); puts("digite la segunda palabra"); gets(s2); c2= strlen(s2); if(c1>c2) { puts("la segunda es mas chica"); puts(strupr(s1)); puts(strlwr(s2)); } else { if (c1<c2) { puts("la primera es mas chica"); puts(strupr(s2)); puts(strlwr(s1)); } else puts("son iguales"); } getch(); return 0; }

MRC-JMB-2012

Pgina 3

Programa 3: El programa, lee los nombres y edades de 5 alumnos y que imprima tres

listados (de nombre y edad) diferentes: a. Datos originales, tal como se leyeron b. Ordenados de acuerdo a la edad, de menor a mayor. c. Ordenados alfabticamente.
Guarde como g4_pr3.cpp //Ordena alfebetica y numericamente los nombres y edades de 5 estudiantes. #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> main() { char nom[5][15], aux1[15], e[3]; int edad[5],i, aux,c,x; fflush(stdin); for (i=0; i<=4; i++) //Entrada de Datos { fflush(stdin); printf("\n digite datos de\t%i\n",i); puts("nombre"); gets(nom[i]); puts("edad"); //lee edad como cadena gets(e); edad[i]=atoi(e); //convierte la cadena a entero } puts("DATOS ORIGINALES"); for (i=0; i<=4; i++) printf("%s \t %i\n", nom[i], edad[i]); c=1; //Inicia el ordenamiento por edades while (c!=0) { c=0; for (i=0; i<4; i++) { if (edad[i]>edad[i+1]) { aux=edad[i]; edad[i] =edad[i+1]; edad[i+1]=aux; strcpy(aux1, nom[i]); strcpy(nom[i], nom[i+1]); strcpy(nom[i+1], aux1); c=1; MRC-JMB-2012 Pgina 4

} } } puts("ORDENADO POR EDADES"); for (i=0; i<=4; i++) printf("%s \t %i\n", nom[i], edad[i]); c=1; //inicia orden alfabetico while (c!=0) { c=0; for (i=0; i<4; i++) { x=strcmp(nom[i],nom[i+1]); if (x>0) { aux=edad[i]; edad[i] =edad[i+1]; edad[i+1]=aux; strcpy(aux1, nom[i]); strcpy(nom[i], nom[i+1]); strcpy(nom[i+1], aux1); c=1; } } } puts("ORDENADO POR nombres"); for (i=0; i<=4; i++) printf("%s \t %i\n", nom[i], edad[i]); c=1; getch(); return 0; }

Programa 4: Disee un programa que intercambie el primer elemento con el ultimo de la

"Cadena de Ejemplo", luego el segundo con el penltimo, posteriormente el tercero con el antepenltimo y as sucesivamente hasta que ambas posiciones son iguales (Cuando se alcanza la mitad de longitud de la cadena dada) Guarde como g4_pr4.cpp
//Intercambia el orden de los caracteres de una cadena de caracteres. #include <string.h> #include <stdio.h> #include <conio.h> #include <stdlib.h>

MRC-JMB-2012

Pgina 5

void intercambiar(char vector[], int pos1, int pos2) { char aux=vector[pos1]; int j; vector[pos1]=vector[pos2]; vector[pos2]=aux; for (j=0; j<pos2+1; j++) printf("%c ", vector[j]); printf("\n Intercambia %c con %c",aux, vector[pos1]); printf("\n"); getch(); return; } void invierteCadena(char cadena[]) { int largo = strlen(cadena); system("cls"); printf("La longitud de la cadena es: %i", largo); printf("\nLa cadena original es: %s", cadena); printf("\n"); system("pause"); printf("\n"); if ((largo%2)==0) { for (int i=0; i < largo/2; i++) intercambiar(cadena, i, (largo-1)-i); } else { for (int i=0; i < (largo/2)+1; i++) intercambiar(cadena, i, (largo-1)-i); } return; } int main() { char cad[] = "Cadena de Ejemplo"; invierteCadena(cad); printf("\n"); system("pause"); return 0; }

MRC-JMB-2012

Pgina 6

PARTE II Programas con errores.


Digite los siguientes programas y corrija los errores que encuentre.

Programa 5: Este programa lee dos palabras, las compara e indica cual de las dos es mayor, de acuerdo a sus caracteres. Imprime las palabras, la ms pequea en minsculas y la ms grande en maysculas. Guarde como g4_pr5.cpp // Compara dos palabras para indicar cual es la mas grande, segun sus caracteres #include <stdio.h> #include <conio.h> #include <string.h> main() { char s1[30]="\0", s2[30]="\0"; puts("digite la primera palabra"); gets(s1); puts("digite la segunda palabra"); gets(s2); c=strcmp(s1,s2); printf("\n\n\n el resultado de la comparacin es:\t \n\n" c); if(c>0) puts("la segunda es mas chica") puts(strurp(s1)); puts(strlwr(s2)); else { if (c<0) { put("la primera es mas chica"); puts(strlwr(s2)); puts(struper(s1)); } else puts(Los caracteres de las cadenas son iguales); } getch(); return 0; }

MRC-JMB-2012

Pgina 7

Programa 6: Este programa lee diez nombres de frutas, imprime solamente las que tengan cuatro caracteres, con el primer carcter en maysculas; adems cuenta las frutas que son impresas. Gurdelo como g4_pr6.cpp /*Lee diez nombres de frutas y despliega solo los que estan compuestos por un maximo de 4 letras, reportando la cantidad de frutas seleccionadas*/ #include <conio.h> #include <stdio.h> #include <string.h> main() { char fruta[15]; int i, largo, cuenta; for (i=0;i<=largo;i++) { printf("Digite Fruta %i: ", i); largo = strlen(fruta); if (longitud<=4) { cuenta++; tolower(fruta[0]); printf("Fruta Seleccionada: %s\n", fruta); } } printf("\nLa cantidad de frutas seleccionadas fue: %i", cuenta); getch(); return 0; }

Programa 7: Este programa lee el nombre y el carnet de un estudiante, luego imprime los datos y por ultimo imprime el nombre invertido. Gurdelo como g4_pr7.cpp. Usted debe modificar el programa para que funcione con 15 estudiantes. //lee el nombre y carnet de un estudiante #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> main () { char nomb[15]; MRC-JMB-2012 Pgina 8

char carnet[7] ; printf("\n Introduzca el nombre del estudiante: ") ; scanf("%s", nomb) ; fflush(stdin) ; printf("\n Introduzca el carnet del estudiante: ") ; scanf("%s", carnet) ; fflush(stdin) ; printf("\n Nombre Digitado: %s", nomb) ; printf("\n Carnet del estudiante: %s", carnet) ; printf("\n Nombre Invertido: %s", strrev(nomb)) ; getch() ; } // main

Programa 8: Programa que lee primero los nombres, despues el primer apellido,luego el segundo apellido y por ultimo imprime: primero los apellidos y despues los nombres. gurdelo como g4_pr8.cpp //lee el nombre y los dos apellidos en tres cadenas diferentes. // imprime una sola cadena conteniendo los apellidos y el nombre #include<stdio.h> #include<conio.h> #include<string.h> main() { char Nbres[20],Apel1[15],Apel2[15]; char Nombre[55]=""; puts("Digite los nombres\n"); scanf(" %[^\n]", Nbres); puts("Digite 1er. apellido, dejando un espacio en blanco al final\n "); scanf(" %[^\n]", Apel1); puts("Digite 2do. apellido,dejando un espacio en blanco al final\n "); scanf(" %[^\n]", Apel2); strcopy(Nombre,Apel1); strcopy(Nombre,Apel2); strcopy(Nombre,Nbres); printf("%s\n",Nombre); getch(); return 0; }

MRC-JMB-2012

Pgina 9

PARTE III:

Ejercicios Propuestos

Resolver los siguientes problemas haciendo uso del proceso solucionador de problemas. Cada programa gurdelo com g4_ej##.cpp (donde ## es el nmero correlativo del ejercicio)

1.

Escribir una solucin que lea una frase del teclado y que despliegue el nmero de palabras que tiene la frase.

2. Disee un programa que lea el nombre completo de una persona (dos nombres y dos apellidos. Debe de imprimirse solamente el primer apellido. 3. Disear un programa que lea una cadena y la convierta a una cadena en slo maysculas, se debe imprimir la original (leda) y la cambiada. En otra cadena diferente se debe dejar la cadena leda solo en minsculas.

4. A Escriba una solucin que lea la cadena Compro, la cadena Vendo y la cadena y Reparo Computadoras; luego que despliegue las cadenas: i. Compro, Vendo y Reparo Computadoras ii. Vendo y Reparo Computadoras iii. Reparo, Compro y Vendo Computadoras 5. Disear una solucin que reporte si una cadena es un palndromo. Una cadena es un palndromo si se lee igual de izquierda a derecha que de derecha a izquierda. 6. Escribir una solucin que dada una cadena de caracteres y un entero correspondiente a una posicin vlida dentro de ella, genere una nueva cadena de caracteres que contenga todos los caracteres a la izquierda de dicha posicin, pero en orden inverso. 7. Escribir una solucin que lea una frase y que muestre en una columna cada palabra de la frase seguida del nmero de letras que la componen.

8. Escribir una solucin que lea una frase (teclear cada palabra con separaciones mayores a un espacio entre cada una de ellas), sustituir todas las secuencias de dos o ms espacios por un solo espacio y mostrar la frase obtenida. 9. La clave murcilago consiste en colocar 1 cada vez que se encuentre la vocal a, 2 en vez de e, 3 en lugar de i, 4 por o y 5 cada vez que aparezca la u en una palabra. De manera que: aurora se escribira como: 15r4r1. Disear un programa que leyendo una palabra utilice la clave murcilago para luego desplegarla en forma codificada o encriptada. 10. Elabore una solucin que cuente la frecuencia con la que aparecen el, la, de en cierta frase dada. Por ejemplo: La UES es la mejor Universidad de El Salvador. Debe desplegar: el: MRC-JMB-2012 0 la: 2 de: 1 Pgina 10

11. Leer 10 palabras desde el teclado y desplegar todas aquellas que comiencen con la raz: pre. En caso que ninguna cumpla la condicin, notificar al usuario. 12. Dado el nombre propio de una persona, compuesto de dos nombres y dos apellidos (por ejemplo: JUAN ANTONIO PEREZ GODOY) ledo en una sola cadena de caracteres; disee un programa que divida la cadena en 4 sub-cadenas diferentes, una para cada parte del nombre: nombre1 (JUAN), nombre2 (ANTONIO), apellido1 (PEREZ), apellido2 (GODOY), utilizando la funcin isspace. Se debe imprimir el nombre completo y sus cuatro partes. 13. Disee un programa que convierta una cadena a un valor entero, como primer paso valide por medio de las funciones de clasificacin si la cadena solo posee nmeros. 14. Dada una cadena de caracteres se necesita ver impresas solo las letras que no son vocales. Disee un programa que imprima la cadena original y la modificada. 15. Disee un programa que lea una cadena solo con letras minsculas, se debe verificar que sean minsculas. Se debe imprimir la cadena leda, y la misma pero, sustituyendo los signos de puntuacin (, : ; .) por el caracter: ~. 16. Disee un programa que, de una cadena ingresada por el usuario, imprima el nmero de: Letras maysculas, Letras minsculas, Punto y comas (;) y al final debe imprimirse cada carcter que forma la cadena y su correspondiente cdigo ASCII 17. Necesitamos un programa que lea una cadena de caracteres, y la convierta a nmero real, para lo cual se debe verificar que la cadena se pueda convertir a un valor numrico. Imprima la cadena inicial y el valor numrico resultante. 18. Disee un programa que simule una calculadora bsica (+,-,*,/) utilizando las funciones atof y atoi, es decir los nmeros que se utilicen como datos deben ser declarados como cadenas. 19. Disee un programa que lea una cadena de caracteres y la imprima como dato original, luego debe de formarse una nueva cadena solamente con las consonantes que tengan un cdigo ascii impar en letras minsculas; y, una tercera cadena con las consonantes de cdigo ASCII par en maysculas. 20. Disee un programa que lea dos cadenas. Se debe imprimir ambas cadenas, y un mensaje adecuado segn resulte de su comparacin; por ejemplo cadenas

MRC-JMB-2012

Pgina 11

iguales o cadena1 mayor cadena1 menor. cadenas sin las funciones de string.h

Realice la comparacin de las

21. Dado el nombre completo de una persona, generar el carnet con el siguiente formato: a. Las dos primeras letras corresponden a las iniciales del primer y segundo apellido, en caso de poseer un apellido la letra del primer apellido se repetir. b. Concatenarle a esto un nmero correlativo de 5 cifras, es decir 12001 para el primer carnet generado, 12002 para el segundo etc.

MRC-JMB-2012

Pgina 12

You might also like