cadena de caracteres

Anuncio
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
CADENA DE CARACTERES
Una vez se conceptualizó el concepto fundamental de lo que es un vector o
arreglo unidimensional, se puede con gran facilidad hablar de cadena de
caracteres, pues se comporta como un arreglo de este tipo, a diferencia de otros
lenguajes que trae un tipo primitivo para el manejo de este tipo de datos,
normalmente se denominan string
La declaración es similar a un vector normal ejemplo:
char cadena[10];
En este caso hemos abierto un arreglo de 10 espacios para manejar una cadena
de 9 caracteres
Observación si se debe definir una cadena con un espacio más, puesto que C++
reserva la última posición para identificar el fin de la cadena \0
Una cadena puede almacenar todo tipo de información de tipo alfanumérico como:
nombres de personas, mensajes de error, números de teléfono, direcciones entre
otras.
La asignación directa sólo está permitida cuando se hace junto con la declaración.
Por ejemplo:
char S[5];
S = "UNAD"
O también podemos realizar una asignación uno a uno así:
char S [5];
S [0] = 'U';
S [1] = 'N';
S [2] = 'A';
S [3] = 'D';
S [4] = '/000';
1
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
Los elementos del tipo caracter (tipo char en lenguaje C) se pueden agrupar para
formar secuencias que se denominan cadenas de caracteres, o simplemente
cadenas. En este texto, y también en el texto de un programa en C, las cadenas
se delimitan por dobles comillas. Por ejemplo, “CH?*$A7!” y “soy cadena” son dos
cadenas, la primera formada por 8 caracteres y la segunda por 10.
En la memoria del computador una cadena se guarda en un arreglo de tipo
carácter, de tal manera que cada símbolo de la cadena ocupa una casilla del
arreglo. Sin embargo, se utiliza una casilla adicional del arreglo para guardar un
carácter especial que se llama terminador de cadena. En C y en el pseudocodigo
este carácter especial es ´\0´. Como lo indica su nombre, la función de este
carácter especial es indicar que la cadena termina.
Las dos cadenas mencionadas arriba, se representan en la memoria del
computador como lo indica la siguiente figura:
La longitud de una cadena se define como el número de símbolos que la
componen, sin contar el terminador de cadena. Es muy importante tener en cuenta
que aunque el terminador de cadena no hace parte de la cadena, sí ocupa una
casilla de memoria en el arreglo.
PROGRAMACION EN FALCON C++
/*Escribir un programa que lea el nombre, la edad y el número de teléfono de un usuario y
los muestre en pantalla.*/
#include <conio.h>
#include <iostream>
using namespace std;
char Nombre[30]; // cadena para almacenar el nombre (29 caracteres)
2
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
int Edad; // Un entero para la edad
char Telefono[13]; // Y otra cadena para el numero de telefono (12 dígitos)
int main()
{
// Mensaje para el usuario y captura de información
cout << "Escriba su nombre : :";
cin>>Nombre;
cout<<"\n Ingrese la edad" ;
cin>>Edad;
cout <<"Digite el numero de telefono ";
cin>>Telefono;
// Visualización de los datos leídos
cout << "Nombre:" << Nombre << endl; // = "\n"
cout << "Edad:" << Edad << endl;
cout << "Teléfono:" << Telefono << endl;
getch();
return 0;
}
Miremos que el teléfono se hubiese podido leer como un entero, pero es posible
que se agreguen caracteres especiales como paréntesis o guiones, lo que lo
convierten en alfanumérico
Si ya lo sé, no funcionó como se quería, ahora prueba sin escribir espacios en la
variable nombre… ahora si funciono verdad. Esto sucede porque la cin>> es un
canal básico de entrada, el cual no permite la separación de cadena de
caracteres.
Afortunadamente C++ incorpora una serie de librerías que ayudan a manipular de
manera adecuada este tipo de datos. La librería estándar de C++ iostream,
contiene la cantidad de funciones pero las principales podemos decir que son 4:




cin, canal de entrada estándar.
cout, canal de salida estándar.
cerr, canal de salida de errores.
clog, canal de salida de diario o anotaciones
Dedicaremos un tiempo a la función cin>>, por ser una de las más utilizadas, el
objeto cin se pude emplear con:
3
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
 cin.getline( ), este llamado a función, puede resolver el problema del
ejercicio anterior, cuando únicamente permitía la entrada de una cadena sin
espacios, por tanto la función cin.getline permite leer una línea completa
incluyendo los espacios, para el ejercicio anterior cin.getline(nombre,30), es
necesario especificar la longitud máxima de la cadena a ingresar.
 cin.get( ): permite ingresar carácter por carácter, normalmente se acompaña
de un ciclo condicional como while
 cin.put( ) Caso contrario del anterior, permite una salida de caracteres, uno
a uno.
Afortunadamente hay otra serie de librería que permite una manipulación
adecuada de los caracteres, entre ellas:
Librería string: librería estándar del ANSI C, entre sus principales funciones están:
 memchr: void *memchr (const void *s, int c, size_t n);
Localiza la primera aparición de un carácter para en los primero n caracteres de
una cadena
Ejemplo
#include <iostream.h>
#include <stdio.h>
#include <string.h>
int main()
{
char cadena[] = "Mundo cruel...";
char *puntero;
puntero = (char *)memchr( cadena, 'd', 15 );
cout<< cadena<<endl;
cout<< puntero<<endl;
return 0;
}
4
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
A continuación se presentaré un listado con las funciones de esta librería,
esperando que usted profundice más es este aspecto
memchr
memcpy
memset
strchr
strcoll
strcspn
strlen
memcmp
memmove
strcat
strcmp
strcpy
strerror
strncat
strncmp
strpbrk
strspn
strtok
strncpy
strrchr
strstr
strxfrm
Librería ctype ANSI C
Contiene las funciones y macros de clasificación de caracteres
 tolower: convierte un carácter a minúscula
Ejemplo:
/* Mediante la utilización de un ciclo podemos convertir toda una cadena que esta en
mayúsculas a minúsculas */
#include <stdlib.h>
#include <iostream>
#include <ctype.h>
using namespace std;
int main()
{
char cadena[ ] = "UNIVERSIDAD – UNAD-";
int i;
for (i=0; cadena[i]; i++)
cadena[i] = tolower(cadena[i]);
cout << cadena << endl;
system (“pause”);
return 0;
}
 toupper: El caso contrario de tolower convierte caracteres a mayúscula
También contiene una serie de macros a las que les hago referencia a
continuación
5
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
isalnum
isdigit
ispunct
toascii
isalpha
isgraph
isspace
isascii
islower
isupper
iscntrl
isprint
isxdigit
Ejemplo de funciones varias para manipular cadenas de caracteres. La mayoría
vienen incorporadas en el archivo a incluir string.h
Ejercicio: Dada una cadena de caracteres cuenta las palabras de un texto, calcula
el porcentaje de vocales e imprime el texto al revés
Manos a la obra
Para dar solución al ejercicio se plantea realizar tres pasos sencillos los cuales
son: defina las variables de entrada, proceso y salida que se van a utilizar para
dar solución al enunciado. Para el caso particular se plantea las siguientes
variables y cadena
Entrada
cad[500],
Proceso
Salida
p,
contar_vocales, porc, cont,
V, aux, i, len
El segundo paso es codificar en la herramienta Falcon C++ el programa, utilizando
las mismas variables, y arreglo utilizados en el pseudocodigo
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <iostream>
using namespace std;
int contar_vocales(char *);
char cad[500],*p;
6
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
int longi, i, x, P, R, V, longinP, len, NumeroAleatorio;
int porc=0;
int main(){
cout << "Ingrese un texto: ";
gets(cad);
longi = strlen(cad);
//-------------------------------Contador palabras-----------------------------P=0;
for(x=0;x<500;x++){
if(cad[x]==' ' && x!=499 && cad[x+1]!= ' ')
P++;
}
cout << "\nCantidad de Palabras: " << P+1;
//--------------------------------Porcentaje-----------------------------------cout << "\nCantidad de Vocales: " << contar_vocales(cad);
V = contar_vocales(cad);
cout << "\nCantidad de caracteres: " << longi-P;
longinP= longi-P;
porc= (V*100)/longinP;
cout << "\nPorcentaje de vocales: " << porc << "Por ciento";
//---------------------------------- Al reves----------------------------------len = strlen(cad);
cout << "\nTexto al reves: ";
i=0;
for(i=len;i>=0;i--){
cout << " " << cad[i];
}
cout << "\n";
//--------------------------------------Piso-----------------------------------p=cad;
while(*p!='\0'){
if(*p==' ')
*p='_';
7
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
p++;
}
cout << "Con piso: \n" <<cad;
getch();
}//Main -CuerpoPrincipal//--------------------------------Funcion--------------------------------------int contar_vocales(char *cad){
int cont=0;
char *aux=cad;
while(*aux){
if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
cont++;
aux++;
}//funcion
return cont;
}//contar_vocales
8
Descargar