Anda di halaman 1dari 16

PROGRAMACION DIGITAL MA713-I 212

CADENAS DE CARACTERES
CADENAS DE CARACTERES

Arreglo de Cadenas
g
PROGRAMACION DIGITAL MA713-I 213

Arreglo de Cadenas

Es un arreglo donde cada elemento es una cadena.

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

Donde:
#fil = nro. de filas o nro. de cadenas.
#col = nro. de columnas o nro. de caracteres
d las
de l cadenas.
d
{valor inicial} = valores iniciales opcionales.
PROGRAMACION DIGITAL MA713-I 214

Como vector de cadenas

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

x: Hola Mundo MA713I \n … …


0 1 2 3 … 19

0 Hola
enas

1 Mundo
x2
0 cade

2 MA713I
713
3 \n
20

… …
19 …
30 car
PROGRAMACION DIGITAL MA713-I 215

Como matriz de caracteres

También se puede representar como una matriz de


caracteres.
caracteres
char x[20][30]={"Hola","Mundo","MA713I","\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 MA713I
713 x2 2 M A 7 1 3 I \
\0 …
3 \n 3 \n \0 … … … … … …
… … … … … … … … … … …
19 … 19 … … … … … … … …
30 car x2,5
PROGRAMACION DIGITAL MA713-I 216

Lectura del Arreglo ~


Se lee elemento por elemento. Leer
xi

~
Lee hasta encontrar espacio o salto de línea
scanf("%s",
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
fgets(x[i],#caracteres,g);
PROGRAMACION DIGITAL MA713-I 217

Escritura de Arreglo ~
Se escribe elemento por elemento. Escribir
xi

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


// pantalla

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


PROGRAMACION DIGITAL MA713-I 218

Ejercicio1
Leer n cadenas p
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 MA713-I 219

Solución1
/*Ordena n cadenas*/
#i l d
#include<stdio.h>
di 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*/
o ( ; ; )
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){
strcp (t [j]) strcpy(x[j],x[j+1]);
strcpy(t,x[j]); strcp ( [j] [j+1]) strcpy(x[j+1],t);
strcp ( [j+1] t)
}
for(i=1;i<=n;i++) printf("%d %s\n",i,x[i]);
system("pause");
}
PROGRAMACION DIGITAL MA713-I 220

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

Por ejemplo:
Estas fiestas Pascuas TOME con moderación
P l b
Palabras.txt
t t
CON
ESTAS
FIESTAS
MODERACION
PASCUAS
TOME
PROGRAMACION DIGITAL MA713-I 221

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++){
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 MA713-I 222

Solución2
/*Ordena x burbuja alfabeticamente*/
for(i=1;i<n;i++)
for(j=1;j<=n-i;j++)//de menor a mayor
if( t
if(strcmp(x[j],x[j+1])>0){
( [j] [j+1])>0){
strcpy(t,x[j]);
strcpy(x[j] x[j+1]);
strcpy(x[j],x[j+1]);
strcpy(x[j+1],t);
}
g=fopen("d:\\ma713-i\\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");
palabras txt\n");
system("pause");
}
PROGRAMACION DIGITAL MA713-I 223

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
p j 15 17 12.25
chavez-soto-ana 09 12 14.08
arestegui-valero-ramiro
g 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 MA713-I 224

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


que debe
d b contener
t l siguiente:
lo i i t
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>
p <exp>
p <exf> <Pp>
p
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 MA713-I 225

Problema2
Se lee ppor teclado una frase. Se ppide:
a) El número de palabras que contiene dicha frase.
b)) Almacenar dichas ppalabras en un arreglo
g 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 MA713-I 226

A: Nuestra B: y
recompensa el
se Nuestra
encuentra esfuerzo
en encuentra
t
el recompensa
esfuerzo
f
y
no
en
el
Resultado
PROGRAMACION DIGITAL MA713-I 227

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.

Anda mungkin juga menyukai