Anda di halaman 1dari 16

PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 247

CADENAS DE CARACTERES

Arreglo de Cadenas
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 248

Arreglo de Cadenas

Es un arreglo donde cada elemento es una cadena.

Declaración:
char arreglo[#fil][#col]={valor inicial};

Donde:
#fil = nro. de filas o nro. de cadenas.
#col = nro. de columnas o nro. de caracteres
de las cadenas.
{valor inicial} = valores iniciales opcionales.
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 249

Como vector de cadenas

char x[20][30]={"Hola","Mundo","CB412I","\n"};

x: Hola Mundo CB412I \n … …


0 1 2 3 … 19

0 Hola
20 cadenas

1 Mundo
x2
2 CB412I
3 \n
… …
19 …
30 car
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 250

Como matriz de caracteres

También se puede representar como una matriz de


caracteres.
char x[20][30]={"Hola","Mundo","CB412I","\n"};
0 1 2 3 4 5 … 29

0 Hola 0 H o l a \0 … … …
1 Mundo 1 M u n d o \0 … …
2 CB412I 2 C B 4 1 2 I \0 …
x2
3 \n 3 \n \0 … … … … … …
… … … … … … … … … … …
19 … 19 … … … … … … … …
30 car x2,5
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 251

Lectura del Arreglo de Cadenas ~


Se lee elemento por elemento. Leer
xi

~
Lee hasta encontrar espacio o salto de línea
scanf("%s", x[i]); //por teclado
fscanf(g, "%s", x[i]);//de archivo

Lee hasta encontrar salto de línea


gets(x[i]); //por teclado
fgets(x[i],#caracteres,g); //de archivo
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 252

Escritura de Arreglo de Cadenas ~


Se escribe elemento por elemento. Escribir
xi

printf("%s", x[i]); //en pantalla

fprintf(g,"%s", x[i]); //en archivo


PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 253

Ejercicio1
Leer n cadenas por teclado y ordenarlas alfabéticamente.
Por Ejemplo:

1 MORA 1 BOLO
2 ESCALANTE 2 CORTEZ
3 CORTEZ 3 ESCALANTE
ORDENAR
4 JEANCARLO 4 JEANCARLO
… … … …
n BOLO n MORA
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 254

Solución1
/*Ordena n cadenas*/
#include<stdio.h>
#include<string.h>
int main()
{char x[50][30],t[30]; int i,j,n;
printf("Nro de cadenas: "); scanf("%d",&n); 
getchar(); //para el salto de linea
for(i=1;i<=n;i++){
printf("Cadena%d :",i); gets(x[i]);
}
/*Ordena x burbuja alfabeticamente*/
for(i=1;i<n;i++)
for(j=1;j<=n‐i;j++)//de menor a mayor
if(strcmp(x[j],x[j+1])>0){
strcpy(t,x[j]); strcpy(x[j],x[j+1]); strcpy(x[j+1],t);
}
for(i=1;i<=n;i++) printf("%d %s\n",i,x[i]);  
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 255

Ejercicio2
Dada una frase leída por teclado, se pide hacer un
programa que genere el archivo Palabras.txt, con las
palabras en mayúsculas y en orden alfabético.

Por ejemplo:
Estas fiestas Patrias TOME con moderación
Palabras.txt
CON
ESTAS
FIESTAS
MODERACION
PATRIAS
TOME
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 256

Solución2
/*Ejercicio 2 de cadenas*/
#include<stdio.h>
#include<string.h>
int main()
{char x[50][30],c,t[30]; int i=0,n,j; FILE *g;
printf("Frase: ");
do {i++;
scanf("%s%c",x[i],&c);
}
while(c==' ');
n=i;
//Paso a mayusculas
for(i=1;i<=n;i++)
for(j=0;j<strlen(x[i]);j++){
c=x[i][j];
if(c>='a' && c<='z') c=c‐32;
x[i][j]=c;
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 257

Solución2
/*Ordena x burbuja alfabeticamente*/
for(i=1;i<n;i++)
for(j=1;j<=n‐i;j++)//de menor a mayor
if(strcmp(x[j],x[j+1])>0){
strcpy(t,x[j]);
strcpy(x[j],x[j+1]);
strcpy(x[j+1],t);
}
g=fopen("palabras.txt","w");
for(i=1;i<=n;i++)
fprintf(g,"%d %s\n",i,x[i]);  
fclose(g);
printf("Se creo palabras.txt\n");
system("pause");
}
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 258

Problema1
Se tiene el archivo Base.txt, el cual contiene los alumnos
de una sección, sus notas y promedios:
Base.txt
<Descripción> <exp> <exf> <Pp>
perez-diaz-juan 15 17 12.25
chavez-soto-ana 09 12 14.08
arestegui-valero-ramiro 11 08 13.15
zambrano-mendez-manuel 12 13 18.33

Se pide hacer un programa que genere el archivo Sec.txt,


que debe contener lo siguiente:
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 259

Cambiar a mayúscula el inicio de cada nombre y apellido


(no hay nombre ni apellidos compuestos).
Ordenar de manera alfabética la información.
Mostrar en pantalla el alumno con mayor promedio y su
promedio.
Sec.txt
<Descripción> <exp> <exf> <Pp>
Arestegui-Valero-Ramiro 11 08 13.15
Chavez-Soto-Ana 09 12 14.08
Perez-Diaz-Juan 15 17 12.25
Zambrano-Mendez-Manuel 12 13 18.33

PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 260

Problema2
Se lee por teclado una frase. Se pide:
a) El número de palabras que contiene dicha frase.
b) Almacenar dichas palabras en un arreglo A[50][20]
c) En otro arreglo B[50][20], de la matriz de (b) almacenar
en forma creciente según el número de caracteres que
tengan, además las palabras no deben repetirse. Y si hay
palabras de la misma longitud sólo se almacenará
aquella que sea la menor alfabéticamente.

Ejemplo:
Frase: Nuestra recompensa se encuentra en el esfuerzo
y no en el resultado
Nro de palabras = 12
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 261

A: Nuestra B: y
recompensa el
se Nuestra
encuentra esfuerzo
en encuentra
el recompensa
esfuerzo
y
no
en
el
Resultado
PROGRAMACION DIGITAL - CB412-I CICLO 2014-1 262

Ejercicios Propuestos

• Dado un archivo, leer por teclado una cadena y


determinar cuantas veces se repite la cadena
en el archivo.

• Dado un archivo, leer por teclado dos cadenas,


buscar la primera cadena en el archivo y
remplazarla por la segunda cadena.