PNFI UNESUR
Ing. Maryleivis Palomares.
Trayecto 1 Trimestre 2
UNIDAD 1: ARREGLOS.
Ø Los Arreglos: Definición,
Clasificación y Operaciones Básicos.
Ø Métodos de Ordenamiento.
Ø Métodos de Búsqueda.
1.1.-
DEFINICIÓN DE ARREGLOS.
Podemos entender como
arreglos al conjunto de posiciones en memoria que están relacionadas entre sí
por tener el mismo nombre y poseer una colección de datos del mismo tipo. Cada
posición de almacenamiento es llamado "elemento del arreglo" el cual
es guardado de forma secuencial en la memoria.
Es un identificador que referencia un
conjunto de datos del mismo tipo. Por ejemplo si declaramos un arreglo de tipo int llamado edades, podremos crear un
conjunto de datos de ese tipo y utilizar uno u otro con sólo cambiar el índice
que lo referencia. El índice será valor entero y positivo.
NOTA: En los lenguajes de programación
como C y C++ los arreglos o arrays por su nombre en inglés comienzan por el
número 0.
Índice:
es
cada uno de los elementos que componen el arreglo, el cual esta referenciado
por una posición correlativa y numerada en forma entera.
1.2.-
CLASIFICACIÓN DE ARREGLOS.
A) Unidimensional o Vector.
Un vector es un array unidimensional, es decir,
sólo utiliza un índice para referenciar a cada uno de los elementos. Su
declaración será:
tipo nombre [tamaño];
El
tipo puede ser cualquiera de los ya conocidos y el tamaño indica el número de
elementos del vector ( se debe indicar entre corchetes [ ] ). En el
ejemplo puedes observar que la variable i es utilizada como índice, el
primer for sirve para rellenar el vector y el segundo para visualizarlo.
Como ves, las posiciones van de 0 a 9 ( total 10 elementos ).
/* Declaración de un array. */
#include <stdio.h>
int main() /* Rellenamos del 0 - 9 */
{
int vector[10],i;
for (i=0;i<10;i++) vector[i]=i;
for (i=0;i<10;i++) printf(" %d",vector[i]);
return 0;
}
|
Podemos
inicializar (asignarle valores) un vector en el momento de declararlo.
Si lo hacemos así no es necesario indicar el tamaño. Su sintaxis es:
tipo nombre []={ valor 1, valor 2...}
Ejemplos:
int vector[]={1,2,3,4,5,6,7,8};
char vector[]="programador";
char vector[]={'p','r','o','g','r','a','m','a','d','o','r'};
Una particularidad con los vectores de tipo
char (cadena de caracteres), es que deberemos indicar en que elemento se
encuentra el fin de la cadena mediante el caracter nulo (\0). Esto no lo
controla el compilador, y tendremos que ser nosotros los que insertemos este caracter
al final de la cadena.Por tanto, en un vector de 10 elementos de tipo char
podremos rellenar un máximo de 9, es decir, hasta vector[8]. Si sólo
rellenamos los 5 primeros, hasta vector[4], debemos asignar el caracter
nulo a vector[5].
Es
muy sencillo: vector[5]='\0'; .
Ahora veremos un ejemplo de como se rellena un vector de tipo char.
/* Vector de tipo char. */
#include <stdio.h>
int main() /* Rellenamos un vector char */
{
char cadena[20];
int i;
for (i=0;i<19 && cadena[i-1]!=13;i++)
cadena[i]=getche( );
if (i==19) cadena[i]='\0';
else cadena[i-1]='\0';
printf("\n%s",cadena);
return 0;
}
|
Podemos
ver que en el for se encuentran dos condiciones:
1.-
Que no se hayan rellenado todos los elementos (i<19).
2.-
Que el usuario no haya pulsado la tecla ENTER, cuyo código ASCII es 13.
(cadena[x-i]!=13).
También podemos observar una nueva función llamada getche( ), que se
encuentra en conio.h. Esta función permite la entrada de un caracter por
teclado. Después se encuentra un if, que comprueba si se ha rellenado
todo el vector. Si es cierto, coloca el caracter nulo en el elemento nº20 (cadena[19]).
En caso contrario tenemos el else, que asigna el caracter nulo al
elemento que almacenó el caracter ENTER. En resumen: al declarar una cadena
deberemos reservar una posición más que la longitud que queremos que tenga
dicha cadena.
B)Multidimensionales o Matrices.
Una
matriz es un array multidimensional. Se definen igual que los vectores
excepto que se requiere un índice por cada dimensión.
Es
una estructura de datos estática y de un mismo tipo de datos, y de longitud
fija que almacena datos de forma matricial. De igual forma que los arreglos
unidimensionales, el almacenamiento de los datos en la memoria se realiza de
forma secuencial y son accedidos mediante índices. Los arreglos multidimensionales son también
conocidos como matrices. Por lo tanto se
llama matriz de orden "m×n" a un conjunto rectangular de
elementos dispuestos en filas
"m" y en columnas "n", siendo m y n números naturales. Las matrices se denotan con letras
mayúsculas: A, B, C, ... y los elementos de las mismas con letras minúsculas y
subíndices que indican el lugar ocupado: a, b, c, ... Un elemento genérico que
ocupe la fila i y la columna j se escribe i,j. Si el elemento genérico aparece
entre paréntesis también representa a toda la matriz: A (i,j).
Una matriz de orden 3x4 se muestra a
continuación, siendo M una matriz de 3
filas y 4 columnas, la representación gráfica de sus posiciones sería la
siguiente:
M 3x4
Filas = 3, columnas = 4
|
|
|
columnas
|
|
|
|
c1
|
c2
|
c3
|
c4
|
|
f1
|
m[f0,c0]
|
m[f0,c1]
|
m[f0,c2]
|
m[f0,c3]
|
|
filas
|
f2
|
m[f1,c0]
|
m[f1,c1]
|
m[f1,c2]
|
m[f1,c3]
|
|
f3
|
m[f2,c0]
|
m[f2,c1]
|
m[f2,c2]
|
m[f2,c3]
|
|
|
|
|
|
|
La sintaxis de una matriz en Lenguaje C es la siguiente:
tipo nombre [tamaño 1][tamaño 2]...;
Una matriz bidimensional se podría representar gráficamente como una tabla con filas y columnas.
La matriz tridimensional se utiliza, por ejemplo, para trabajos gráficos con objetos 3D.
En el ejemplo puedes ver como se rellena y visualiza una matriz bidimensional. Se necesitan dos bucles para cada una de las operaciones. Un bucle controla las filas y otro las columnas.
/* Matriz bidimensional. */
#include <stdio.h>
int main() /* Rellenamos una matriz */
{
int x,i,numeros[3][4];
/* rellenamos la matriz */
for (x=0;x<3;x++)
for (i=0;i<4;i++)
scanf("%d",&numeros[x][i]);
/* visualizamos la matriz */
for (x=0;x<3;x++)
for (i=0;i<4;i++)
printf("%d",numeros[x][i]);
return 0;
}
|
Si
al declarar una matriz también queremos inicializarla, habrá que tener en
cuenta el orden en el que los valores son asignados a los elementos de la
matriz. Veamos algunos ejemplos:
int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
quedarían asignados de la siguiente manera:
numeros[0][0]=1 numeros[0][1]=2 numeros[0][2]=3 numeros[0][3]=4
numeros[1][0]=5 numeros[1][1]=6 numeros[1][2]=7 numeros[1][3]=8
numeros[2][0]=9 numeros[2][1]=10 numeros[2][2]=11 numeros[2][3]=12
También se pueden inicializar cadenas de texto:
char dias[7][10]={"lunes","martes","miércoles","jueves","viernes","sábado","domingo"};
Para referirnos a cada palabra bastaría con el primer
índice:
printf("%s",dias[i]);
Un arreglo está limitado en la cantidad de
datos que puede albergar solo por la cantidad de memoria disponible
|
Los arreglos se clasifican en:
|
|
A) ARREGLO UNIDIMENSIONAL:
( ARRAY LINEAL
O VECTOR )
|
|
En matemática es conocido como
Vector. Eje: Cantidad
de canastas anotadas por el equipo peruano en cada uno de los 5
partidos del Sudamericano 2000
|
Tamaño 5
|
|
C)ARREGLO BIDIMENSIONAL
(ARRAY BIDIMENSIONAL
O MATRIZ )
|
|
Dos o más vectores de igual tamaño donde sus
elementos de igual índice están relacionados. Eje: Descripción de
productos y sus respectivos precios (8 tipos de productos).
|
Tamaño 8
|
|
C)ARREGLO MULTIDIMENSIONAL
( N - DIMENSIONAL)
|
|
En matemática es conocido como Matriz,
o en base de datos como tabla. Eje: Los sueldos de
10 empleados en cada uno de los meses de Enero a Junio 2000
|
Tamaño 10x6
|
|
|
Eje: Estados (libre u ocupado) de las 10
aulas en cada uno de los 4 pisos de los 5 pabellones.
|
Tamaño 10x4x5
|
|
1.3.-OPERACIONES BÁSICAS CON
ARREGLOS:
Recordando un poco, en la definición de arreglos veamos
esta serie de ejemplos:
int var1[10];
char nombre[50];
float numeros[200];
long double cantidades[25];
Si tomamos el primer caso, estamos declarando un
array de 10 variables enteras, cada una de ellas quedará individualizada por
el subíndice que sigue al nombre del mismo es decir:
var1[0] , var1[1] , … , hasta var1[9] .
Nótese que la CANTIDAD de elementos es 10, pero su
numeración va de 0 a 9 , y no de 1 a 10 . En resumen un array de N elementos
tiene subíndices válidos entre 0 y N - 1. Cualquier otro número usado como
subíndice, traerá datos de otras zonas de memoria, cuyo contenido es
impredecible. Se puede referenciar a cada elemento, en forma individual, tal
como se ha hecho con las variables anteriormente, por ejemplo:
var1[5] = 40 ;
contador = var1[3] + 7 ;
if(var1[0] >> = 37)
..................
También es posible utilizar como subíndice
expresiones aritméticas, valores enteros retornados por funciones, entre
otros. Así podríamos escribir:
printf(" %d " , var1[ ++i] )
;
var1[8] = var1[ i + j ] ;
...............................
int funcion(void) ;
var1[0] = var1[funcion() ] * 15 ;
Por supuesto los subíndices resultantes de las
operaciones tienen que estar acotados a aquellos para los que el array fue
declarado y ser enteros. Inicialización de Arreglos: La inicialización de los
arrays sigue las mismas reglas que vimos para los otros tipos de variables,
es decir: Si se declaran como globales (afuera del cuerpo de todas
las funciones) cada uno de sus elementos será automáticamente
inicializado a cero. Si en cambio, su declaración es local a una función, no
se realiza ninguna inicialización, quedando a cargo del programa
cargar los valores de inicio. La inicialización de un array local,
puede realizarse en su declaración, dando una lista de
valores iníciales:
int numero[8] = { 4 , 7 , 0 , 0 , 0 , 9
, 8 , 7 } ;
Obsérvese que la lista está delimitada por llaves.
Otra posibilidad, sólo válida cuando se inicializan todos los elementos del
array, es escribir:
int numero[] = { 0 , 1 , 2 , 3 , 4 , 5
, 6 , 7 , 8 , } ;
Donde se obvia la declaración de la cantidad de
elementos, ya que está implícita en la lista de valores constantes.
También se puede inicializar parcialmente un array,
por ejemplo:
int numero[10] = { 1 , 1 , 1 } ;
En éste caso los tres primeros elementos del mismo
valdrán 1, y los restantes cero en el caso que la declaración sea global, ó
cualquier valor impredecible en el caso de que sea local.
|
Ø MÉTODOS DE ORDENAMIENTO:
La ordenación o
clasificación es el proceso de organizar datos en algún orden o
secuencia específica, tal como creciente o decreciente, para datos numéricos, o
alfabéticos, para datos de caracteres. Los métodos de ordenación más directos
son los que se realizan en el espacio ocupado por el array. Los más populares
son:
Método de Intercambio o de Burbuja:
Se basa en el principio de comparar pares de elementos
adyacentes e intercambiarlos entre si hasta que estén todos ordenados.
Supongamos que se desea clasificar en orden ascendente el vector o lista:
9, 8, 0, 2, 5, 1, 3, 2, 9
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
Los pasos a dar son:
- CompararA[1] yA[2] si están en orden, se mantienen
como están, en caso contrario se intercambian entre si.
- A continuación se comparan los elementos 2 y 3; de
nuevo se intercambian si es necesario.
- El proceso continua hasta que cada elemento del
vector ha sido comparado con sus elementos adyacentes y se han realizado los
intercambios necesarios.
Este video muestra de manera simple el ordenamiento de
burbuja:
Ejemplo Práctico
/*Ordenamiento Burbuja */
#include <stdio.h>
#include <conio.h>
#define TAM 9
int main()
{
int a[TAM] = { 9,
8, 0, 2, 5, 1, 3, 2, 9};
int i, pasada,
aux;
printf("Datos en el orden inicial:\n\n");
for(i=0;i<=TAM-1;i++)
printf("%4d",a[i]);
for
(pasada=1;pasada<=TAM-1;pasada++) /*pasadas*/
for (i=0;i<=TAM-2;i++)
if (a[i]>a[i+1]) /*comparación */
{
/*intercambio*/
aux=a[i];
a[i] = a[i+1];
a[i+1] = aux;
}
printf(
"\n\nDatos ordenados en sentido ascendente:\n\n" );
for
(i=0;i<=TAM-1;i++ )
printf("%4d", a[i]);
printf("\n");
getch();
return 0;
}
Ordenamiento por inserción
(Insertion Sort).
Consiste en insertar un elemento en el vector en una
parte ya ordenada de este vector y comenzar de nuevo con los elementos
restantes. Por ser utilizado generalmente por losjugadores de cartas se le
conoce también por el método de la baraja. Por ejemplo, supóngase que se tiene
la lista desordenada;
5 14 24 39 43 65 84 45
Para insertar el elemento 45, habrá que insertar
entre 43 y 65, lo que supone desplazar a la derecha todos
aquellos números de valor superior a 45, es decir, saltar
sobre 65 y 84.
5 14 24 39 43 65 84 45
El método se basa en comparaciones y desplazamientos
sucesivos. El algoritmo de clasificaciones de un vector X para N elementos se
realiza con un recorrido de todo el vector y la inserción del elemento
correspondiente en el lugar adecuado. El recorrido se realiza desde el segundo
elemento al n-ésimo.
Veamos el siguiente ejemplo.
Ejemplo Práctico.
#include <stdio.h>
int arreglo[10] = {3,10,1,8,15,5,12,6,5,4};
/*Declaracion e inicialización
del arreglo. */
/*imprimearreglo - Funcion que muestra por pantalla
el contenido de un arreglo.*/
void imprimearreglo() {
int i; for
(i=0;i<10;i++)
printf("Elemento
%d: %d \n",i,arreglo[i]);
}
void main() /*Funcion Principal del Programa*/
{
int i,j,k;
imprimearreglo();
for (i=1;
i<10; i++) {
j=i;
while (j>=0 && arreglo[j]<arreglo[j-1]) {
k=arreglo[j];
arreglo[j]=arreglo[j-1];
arreglo[j-1]=k;
j--;
}
}
printf("\n\nArreglo ordenado
\n\n");
imprimearreglo();
}
Ordenamiento Rápido (Quicksort).
El ordenamiento rápido (quicksort en inglés) es un
algoritmo basado en la técnica de divide y vencerás, que permite, en
promedio, ordenar n elementos en un tiempo proporcional a n log n. Esta es la
técnica de ordenamiento más rápida conocida. El algoritmo fundamental es el
siguiente:
Elegir un elemento de la lista de elementos a ordenar,
al que llamaremos pivote.
Resituar los demás elementos de la lista a cada lado
del pivote, de manera que a un lado queden todos los menores que él, y al otro
los mayores. En este momento, el pivote ocupa exactamente el lugar que le
corresponderá en la lista ordenada.
La lista queda separada en dos sublistas, una formada
por los elementos a la izquierda del pivote, y otra por los elementos a su
derecha.
Repetir este proceso de forma recursiva para cada
sublista mientras éstas contengan más de un elemento. Una vez terminado este
proceso todos los elementos estarán ordenados. Como se puede suponer, la
eficiencia del algoritmo depende de la posición en la que termine el pivote
elegido.
Veamos el siguiente ejemplo.
Puedes ver otra explicación, esta vez con voz
Pseudocódigo QuickSort:
Nombre Función: OrdRap
Parámetros:
Lista a ordenar (lista)
Índice inferior (inf)
Índice superior (sup)
// Inicialización de variables
1. elem_div = lista [sup];
2. i = inf - 1;
3. j = sup;
4. cont = 1;
// Verificamos que no se crucen los
límites
5. if (inf >= sup)
6. retornar;
// Clasificamos la sublista
7. while (cont)
8. while (lista
[++i] < elem_div);
9. while (lista
[--j] > elem_div);
10. if (i < j)
11. temp = lista[i];
12. lista[i] = lista[j];
13. lista[j] = temp;
14. else
15. cont = 0;
// Copiamos el elemento de división
// en su posición final
16. temp = lista[i];
17. lista[i] = lista[sup];
18. lista[sup] = temp;
// Aplicamos la función
19. OrdRap (lista, inf, i - 1);
20. OrdRap (lista, i + 1, sup);
Ejemplo de Implementación de
Quicksort en C
void SortArray (int
array[],int first,int last)
{
int i,j,p,t;
// i se hace igual al índice del primer
elemento
i= first;
// y j igual al índice del último
elemento
j= last;
// p se hace igual al elemento pivote del
arreglo
p= array[(first+last)/2];
do {
// se hace
la partición del arreglo
while
(array[i]<p) i++;
while (p<array[j]) j--;
if (i<=j)
{
// se intercambian los elementos i-esimo y j-esimo del arreglo
t= array[i];
array[i]= array[j];
array[j]= t;
i++; j--;
}
} while
(i<=j);
if (first<j)
SortArray(array,first,j);
if (i<last)
SortArray(array,i,last);
}
Ø METODOS DE BUSQUEDA:
La búsqueda es una operación que tiene por objeto la localización
de un elemento dentro de la estructura de datos (arreglo). A menudo un
programador estará trabajando con grandes cantidades de datos almacenados en
arreglos y pudiera resultar necesario determinar si un arreglo contiene un
valor que coincide con algún valor clave o buscado.
Búsqueda secuencial
Este
algoritmo compara uno a uno los elementos del arreglo hasta recorrerlo por
completo indicando si el número buscado existe.Su implementación es la
siguiente:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 10
void main() {
int a[TAM], temp, i, j, num;
randomize(); //Inicializa el generador de numeros aleatorios
printf ("Llenando arreglo con
números aleatorios\n");
for (i=0; i< TAM; i++)
a[i]=random(100);
printf ("Numero
a buscar? ");
scanf ("%d", &num);
for (i=0; i< TAM; i++)
if (a[i] == num){
printf ("\nValor
encontrado");
printf ("\nPosicion:
%d", i);
}
else
printf ("\nNo
existe");
printf ("El
arreglo era:\n");
for (i=0; i< TAM; i++)
printf ("%d
", a[i]);
getch();
}
Búsqueda binaria
Este algoritmo permite buscar de una
manera más eficiente un dato dentro de un arreglo, para hacer esto se determina
el elemento central del arreglo y se compara con el valor que se está buscando,
si coincide termina la búsqueda y en caso de no ser así se determina si el dato es mayor o menor que el elemento central, de
esta forma se elimina una mitad del arreglo junto con el elemento central para
repetir el proceso hasta encontrarlo o tener solo un elemento en el arreglo.
Para poder aplicar este algoritmo se
requiere que el arreglo este ordenado. Su implementación es la siguiente:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 15
void main(){
int
a[TAM], busca, temp, bajo, alto, central;
printf("Llenando el arreglo
con números aleatorios\n");
randomize(); //Inicializa el
generador de aleatorios
for (int i=0; i< TAM; i++)
a[i]=random(100);
//Implementacion de Ordenamiento por burbuja de menor a mayor
printf ("Ordenando
arreglo...\n");
for (int
j=1; j <= TAM;
j++)
for (i=0; i< TAM-1; i++)
if (a[i] > a[i+1]){
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
//Implementacion de busqueda binaria
printf ("\nIntroduce
un numero a buscar: ");
scanf ("%d", &busca);
bajo = 0;
alto = TAM-1;
central = (bajo+alto)/2;
while (bajo < alto && busca != a[central]){
if(busca > a[central])
bajo = central+1;
else
alto = central-1;
central=(bajo+alto)/2;
}
if (busca == a[central])
printf("\n%d
encontrado en posicion %d", busca, central);
else
printf("\n%d
no existe", busca);
printf ("\n\nEl
arreglo ordenado era\n\n");
for (i=0; i< TAM; i++)
printf ("%d ", a[i]);
getch();
}
UNIDAD 2: TRATAMIENTO DE CADENAS DE
CARACTERES.
Ø Definición,
Funciones Asociadas y Operaciones con Cadenas.
2.1.-DEFINICION.
En programación, una cadena de caracteres, o frase (string en inglés) es
una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que
pertenecen a un cierto alfabeto. En general, una cadena de caracteres es una
sucesión de caracteres (letras, números u otros signos o símbolos).
Desde un punto de vista de la
programación, si no se ponen restricciones al alfabeto, una cadena podrá estar
formada por cualquier combinación finita de todo el juego
caracteres disponibles (las letras de la 'a' a la
'z' y de la 'A' a la 'Z', los números del '0' al '9', el
espacio en blanco ' ', símbolos diversos '!', '@', '%', etc.).En este mismo
ámbito (el de la programación), se utilizan normalmente como un
tipo de dato predefinido, para palabras, frases o cualquier otra sucesión de
caracteres. En este caso, se almacenan en un vector de datos,
o matriz de datos de una sola fila (array en inglés).
Representación
de cadenas.
Una cadena suele ser representada entre comillas
dobles superiores ("palabra"),
mientras que un carácter de esa cadena (un char en inglés) suele ser representado
entre comillas simples ('p').
Ejemplo, en C:
Char c = 'a';
Char str [5] = "hola";
2.2.- Funciones
Asociadas.
En programación, una función es un
grupo de instrucciones con un objetivo en particular y que se ejecuta al
ser llamada desde otra función o procedimiento. Una función puede llamarse
múltiples veces e incluso llamarse a sí misma.
Ø strlen.
Es una función asociada al tratamiento de cadenas
que se usa para devolver la longitud de dicha cadena, es decir, el número de
caracteres. Su importancia radica en que permite al programador controlar el
volumen de caracteres que el usuario pueda introducir en determinado momento.
Esta función puede ser necesaria para un Sistema de Registro de Usuarios, o
para un Sistema de Comentarios, o para un programa que manipule gran cantidad
de caracteres que pueda ser difícil controlar. La función strlen no discrimina
entre mayúsculas y minúsculas.
|
/*Este programa devuelve el numero de caracteres
de un texto cualquiera*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
char txt[30];
int st;
printf("Ingresa un texto cualquiera: \n");
scanf("%s",txt);
st=strlen(txt);
printf("Su longitud es de %i",st);
|
Ø
strcmp.
La función retorna un número entero mayor, igual, o
menor que cero, apropiadamente según la cadena apuntada por s1 es mayor, igual,
o menor que la cadena, s2.
|
#include <stdio.h>
#include <string.h>
int main()
{
char s1[5] =
"Abeja";
char s2[5] = "abeja";
int i;
if( i < 0 ) printf(
"menor que" );
else if( i > 0 ) printf(
"mayor que" );
printf( " s2\n" );
return 0;
}
|
Ø
strcpy.
En lenguaje C, para asignar una expresión de cadena
a un array de caracteres, no se puede utilizar el operador de asignación (=).
Para ello, se puede utilizar la función strcpy, que está disponible en la
bibiliteca estándar de C. La sintaxis de una llamada a strcpy es:
strcpy( <variable_destino>,
<cadena_fuente> )
La función strcpy copia el contenido de
la <cadena_fuente> en la <variable_destino>, siendo ésta un array
de caracteres.
Ejemplo: Habiendo declarado el siguiente
array de caracteres:
En pseudocódigo:
cadena ciudad
En lenguaje C:
char ciudad[6];
es posible escribir
En pseudocódigo:
ciudad ← "Roma" (instrucción de asignación)
En lenguaje C:
strcpy( ciudad, "Roma" ) (instrucción de expresión)
Por tanto, en memoria tendremos:
La declaración de la función strcpy se encuentra en el archivo
de cabecera string.h. Por tanto, para poder usar dicha función en un
programa, hay que escribir:
#include <string.h>
2.3.- Operaciones con Cadenas.
Siguiendo en el ámbito de la informática, al considerar
las cadenas como un tipo de datos, hay que definir (o conocer) cuales son las
operaciones que podemos hacer con ellas, en principio éstas podrían ser muchas
y llegar a ser muy sofisticadas, aquí se exponen algunas de ellas:
Ø Asignación: Consiste en asignarle una cadena a otra.
char *strcpy(char [], const char[]); #
en C
cadena1=cadena2; # en C++
Ø Concatenación: Consiste en unir dos cadenas o más (o una cadena
con un carácter) para formar una cadena de mayor tamaño.
$pareja = "Joshua"." y
"."Lidia" # en Perl y PHP;
pareja = "Luisa" + " y
" + "Carmen"; # en C++ y Java con la clase String.
strcat(cadena1,cadena2);
strcat(cadena1, cadena3); # en C (Debe haber
suficiente espacio en la primera)
Ø Búsqueda: Esta operación localiza si una determinada cadena
forma parte de otra cadena más grande o buscar la posición en que aparece un
determinado carácter o secuencia de caracteres en un texto. El resultado de la
función es un valor entero.
Posición (cadena, subcadena)
Subcadena: Es el texto
que se trata de localizar.
Ejemplo:
nombre ----> 'Marielena'
Posición (nombre,'elena')
Produce 5.
La función Posición, al tomar también un valor
numérico entero se puede utilizar en expresiones aritméticas o en instrucciones
de asignación a variables numéricas.
Ø Extracción: Se trata de sacar fuera de una cadena una porción
de la misma según su posición dentro de ella.
Esta operación permite la extracción de una parte
específica de una cadena: subcadena.
Subcadena(cadena, inicio, longitud)
Cadena: Es la cadena de la que debe extraerse una
subcadena.
Inicio: Es un número o expresión numérica entera
que corresponde a la posición inicial de la subcadena.
Longitud: Es la longitud de la subcadena.
Ejemplos:
subcadena('abcdefgh',3,6) Equivale a 'cdef'
subcadena('Tecnológico',1,3) Equivale a 'Tec'
subcadena('México',5,2) Equivale a 'co'
Ø Comparación: Se utiliza para comparar dos cadenas.
int strcmp(const char[], const char[]);
# en C Devuelvee <0 si
la 1ª es menor, >0 si es mayor y 0 si son iguales
cadena1==cadena2; cadena1>cadena2; etc. # en C++ Devuelve un valor de verdad.