Académique Documents
Professionnel Documents
Culture Documents
Las cadenas de caracteres se definen como un arreglo de datos de tipo caracter el cual termina con el carcter nulo. Un arreglo es un grupo de datos homogeneos y finitos que ocupan posiciones consecutivas de memoria. La declaracin de una cadena de caracteres se hace de la siguiente forma: char Nombre_de_la_variable [longitud de la cadena]; Esto hace que se guarde un espacio en memoria suficiente para soportar el numero de caracteres que se estan apartando para la cadena de caracteres que se va a leer. Por ejemplo: char cadena[10]; crea un espacio en memoria para 10 bytes cada uno de los cuales sera ocupado por uno de los caracteres que se van a leer. Lectura de una cadena de caracteres: Para hacer la lectura de una cadena de caracteres se pueden utilizar la funcin scanf o gets de la siguiente forma: scanf("%s",cadena); o gets(cadena); La ventaja de utilizar el gets en lugar del scanf es la lectura de los espacios en blanco, cosa que no hace el scanf. Otra forma de leer una cadena de caracteres es hacerlo caracter por caracter como un arreglo unidimensional o vector, manejandola posicion por posicion cadena[posicion], mas adelante se vera un ejemplo de lo antes mencionado. Ejemplos:
/* MANIPULACION DE UNA CADENA DE CARACTERES MANEJANDOLA COMO UN ARREGLO DE CARCTERES */ #include<conio.h> #include<stdio.h> POSICION POR POSICION,
void main(void) { char cadena[25]; int pos; clrscr(); //Lectura de la cadena de caracteres. gotoxy(20,1); printf("Teclea una cadena de maximo 25 caracteres"); gotoxy(27,2); printf("[ ]"); gotoxy(28,2);
gets(cadena);
clrscr();
for (pos=0;cadena[pos];pos++)
{gotoxy(pos+1,pos+1);
textcolor(pos+1);
cprintf("%c",cadena[pos]);
getch();
#include <conio.h>
#include
<string.h>
#include <dos.h>
#include <stdio.h>
void main(void)
char cadena[80];
int x=0,pos,y,yy,incre=0;
clrscr();
gets(cadena);
textbackground(BLACK);
clrscr();
x=(80-strlen(cadena))/2;
for(pos=0;cadena[pos];pos++)
y=x;
for(yy=14;yy<25;yy++)
{gotoxy(y,yy);
textcolor(pos+1);
cprintf("%c",cadena[pos]);
sound(2000+incre);
incre+=10;
delay(20);
y++;
x+=1;
x=(80-strlen(cadena))/2;
for(pos=0;cadena[pos];pos++)
{ y=x;
for(yy=13;yy>=1;yy--)
{gotoxy(y,yy);
textcolor(pos+1);
cprintf("%c",cadena[pos]);
sound(2000+incre);
incre-=10;
delay(20);
y++;
x+=1;
nosound();
getch();
Impresin de una cadena de caracteres: Para imprimir una cadena de caracteres se puede utilizar la funcin puts o la funcin printf, como se indica a continuacin: puts(cadena); printf("%s",cadena);
la diferencia entre la funcion printf y puts para cadenas de caracteres es que la funcion puts cambia de linea por si sola y la funcion printf no, la ventaja de la funcion printf es que con ella si se pueden desplegar varias cadenas. Al igual que para leer una cadena tambien se puede desplegar una cadena como un arreglo, es decir posicion por posicion, esto tambien se manejara en un ejemplo mas adelante. Ejemplos: #include <conio.h> #include <stdio.h> void main() { char cadena[80]; printf(Teclea la cadena); gets(cadena); clrscr(); puts(cadena); getch();
} Funciones de cadenas de caracteres: Las funciones de cadenas de caracteres que se manejaran en la practica son las siguientes: funcin strlen, funcin strcpy, funcin strcat y funcin stricmp, todas las funciones de cadenas de caracteres funcionan con la biblioteca string.h, por lo que debera incluirla en la seccin de bibliotecas. Funcin strlen: Esta funcin regresa la longitud de una cadena de caracteres. Sintaxis: strlen(cadena); El valor que regresa es un valor de tipo entero. Ejemplo: El siguiente programa lee una cadena de caracteres e imprime por medio de la funcin strlen el numero de caracteres que tecleaste. #include <string.h> #include <stdio.h>
#include <conio.h> void main(void) { char cadena[80]; clrscr(); printf("Teclea una cadena de maximo 80 caracteres "); gets(cadena); printf("La longitud de la cadena que tecleaste es de %d",strlen(cadena)); getch(); } Funcin strcpy. Esta funcin copia a una cadena otra cadena de caracteres. Sintaxis: strcpy(cadena1, cadena2); donde cadena1 deber tener una longitud de cadena suficiente para soportar a la cadena2.
Ejemplo: El siguiente programa, lee una temperatura en F y manda un mensaje de acuerdo a la temperatura, el mensaje se copia en una variable y esta solo se imprime al final. #include <conio.h> #include <stdio.h> #include <string.h> void main(void) { char mensaje[40]; float temp; clrscr(); printf("Cual fue la temperatura promedio en F el dia de hoy"); scanf("%f",&temp);
puts(mensaje); getch();
} Funcin strcat. Esta funcin agrega al final de una cadena de carcteres otra cadena de caracteres. Sintaxis: strcat(cadena1, cadena2); donde al final de la cadena 1 se agregara la cadena 2. Ejemplo: #include <conio.h> #include <stdio.h> #include <string.h> void main() { char
cadena[80]; clrscr(); printf(Teclea una cadena); gets(cadena); strcat(cadena,Agrega al final); puts(cadena); getch(); }
Funcin strimp. Esta funcin compara 2 cadenas de caracteres lexicograficamente hablando, (alfabeticamente), y regresa un valor entero de acuerdo a la comparacin. Sintaxis: stricmp(cadena1,cadena2) Comparacin Valor que regresa Cadena1=Cadena2 =0
Cadena1>Cadena2 >0 Cadena1<Cadena2 <0 si se tiene la cadena "Azul" y la cadena "Rojo", La cadena Azul sera menor que la cadena"Rojo", ya que la primera inicia con A y la segunda con R. Ejemplo:
/* EL SIGUIENTE PROGRAMA LEE UNA CADENA DE CARACTERES Y NO LA MUESTRA
TURBO C */
#include <conio.h>
#include <stdio.h>
#include <string.h>
void main(void)
int pos=0;
clrscr();
for(;;)
cadena[pos]=getch();
if (cadena[pos]==13)
pos--;
break;
else
pos++;
putch('*');
if(stricmp(cadena,"TURBO C\r")==0)
puts(cadena);
else
getch();
DESARROLLO DE LA PRACTICA. PRAC8A.C HACER UN PROGRAMA QUE LEA UNA CADENA DE MAXIMO 80 CARACTERES Y CAMBIE LAS LETRAS MAYUSCULAS POR MINUSCULAS Y LAS LETRAS MINUSCULAS POR MAYUSCULAS. (Utilizar la funcin toupper,convierte las minusculas a mayusculas y la funcion tolower que convierte de mayusculas a minusculas). Por ejemplo, si teclea la cadena "Laboratorio De Programacin" deber aparecer en pantalla: lABORATORIO dE pROGRAMACION PRAC8B.C
HACER UN PROGRAMA QUE LEA UNA CADENA DE CARACTERES Y LA IMPRIMA EN EL CENTRO DE LA PANTALLA DE MANERA VERTICAL. (Utilizar la funcin strlen) PRACT8C.C HACER UN PROGRAMA QUE PIDA EL NOMBRE DEL MES Y DIA DEL AO EN QUE NACIO UNA PERSONA E IMPRIMA EL SIGNO DEL SODIACO QUE LE CORRESPONDE. ARIES DEL 20 DE MARZO AL 18 DE ABRIL
PRACT7D.C
HACER UN PROGRAMA QUE REALIZE UN EXAMEN DE INGLES DONDE LA PERSONA TENGA QUE TECLEAR LAS SIGUIENTES RESPUESTAS:
EL PROGRAMA DEBERA TERMINAR SI LA PERSONA TECLEA TODAS LAS RESPUESTAS CORRECTAS O DESPUES DE 2 INTENTOS.
ADEMAS AL INICIAR DEBERA PREGUNTAR EL NOMBRE DE LA PERSONA QUE VA A HACER EL EXAMEN, AGREGANDO AL FINAL DEL NOMBRE UN MENSAJE QUE INDIQUE SI LO LOGRO AL PRIMER INTENTO, AL SEGUNDO O SI NO LO LOGRO.
Cadena de caracteres.Una cadena en C++ es un conjunto de caracteres, o valores de tipo "char", terminados con el carcter nulo. Internamente se almacenan en posiciones consecutivas de memoria en forma de arreglo. Contenido
[ocultar]
1 Estructura o 1.1 Uso de strcpy o 1.2 Uso de strcnpy 2 Fuentes 3 Referencias 4 Bibliografa 5 Enlaces externos
Estructura
Este tipo de estructuras recibe un tratamiento especial, y es de gran utilidad y de uso continuo. La manera de definir una cadena es la siguiente: char <identificador> [<longitud mxima>]; Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar una posicin para almacenar el carcter nulo, de modo que si queremos almacenar la cadena "HOLA", tendremos que declarar la cadena como: char Saludo[5]; Cuatro caracteres para "HOLA" y uno extra para el carcter '\000'. Tambin nos ser posible hacer referencia a cada uno de los caracteres individuales que componen la cadena, simplemente indicando la posicin. Por ejemplo el tercer carcter de nuestra cadena de ejemplo ser la 'L', podemos hacer referencia a l como Saludo[2]. Los ndices tomarn valores empezando en el cero, as el primer carcter de nuestra cadena sera Saludo[0], que es la 'H'. Una cadena puede almacenar informaciones como nombres de personas, mensajes de error, nmeros de telfono, etc. El tratamiento de las cadenas de caracteres resulta muy importante, debido a la gran cantidad de
informacin que ellas almacenan y su valor semntico. Algunas de las operaciones ms importantes con cadenas, son:
Copia de una cadena Clculo de la longitud, Comparacin, Concatenacin, Extraccin de subcadenas, Bsqueda de informacin dentro de las cadenas, Conversiones
Que se muestran a continuacin, segn las contenidas en la biblioteca llamada string (string.h). Copia de cadenas Esta operacin brinda la posibilidad de copiar el valor de una cadena para una variable de cadena dada. Con stpcpy(var_cadena, cadena2) se copia el valor de cadena2 para var_cadena. Ejemplo: El siguiente programa muestra la copia de la cadena frase1 a la cadena frase2.
Uso de strcpy
#include <iostream.h> #include <string.h> void main() { char frase1[] = "Copiando cadena"; char frase2[80]; strcpy(frase2,frase1); cout << "Cadena # 1: " << frase1 << endl; cout << "Cadena # 2: " << frase2 << endl; } Si la cadena fuente es de longitud mayor que la cadena destino, se cae en el gravsimo error de sobrescribir despus del final de la cadena fuente. Una variante de esta funcin y que ayuda a eliminar el efecto colateral arriba expresado es utilizar la funcin strncpy, stpncpy(var_cadena, cadena2, cantidad) que posee un tercer parmetro (cantidad) para indicar cuntos
caracteres sern transferidos. Una vez transferidos los caracteres, debe escribirse en la cadena destino el carcter null.
Uso de strcnpy
#include <iostream.h> #include <string.h> void main(void) { char destino[10]; char origen[] = "abcdefghi"; strncpy(destino, origen, 3); destino[3] = '\0'; //Si esto no se hace, la salida es imprevisible cout << destino<< '\n'; } La salida sera: abc Es bueno destacar que si una cadena se define con un constructor corriente de arreglo, como en: char cadena[6]; no resultara posible hacer: cadena = "casa"; // ERROR
pues, como sabemos, no es posible aplicar el operador de asignacin para arreglos completos. Entonces usaramos: strcpy(cadena, "casa"); lo cual es mejor que la solucin de copiar de una cadena para otra carcter a carcter: for(i = 0; i < strlen(cadena2); i++) var_cadena[i] = cadena2[i]; var_cadena[i] = '\0'; // carcter nulo de terminacin
Ivan_San...
cout << "Introduce un color: "; cin >> cadena; //Aqu ya se almaceno el color en la cadena Convertimos la cadena a mayusculas para que puedas reconocer casos generales; por ejemplo si alguien escribe Negro, negro, nEgro, NEGRO, neGro, neGRO, etc lo convertimos a mayusculas para que no importa como escriban negro, siempre termine en mayusculas y no tengamos que hacer tantas comparaciones. Esto lo hacemos con la funcin toupper() que se encuentra en el archivo de cabecera "ctype". Toupper slo convierte 1 caracter no una cadena entera, as que tenemos que recorrer la cadena caracter por caracter. int i = 0; while(cadena[i] != \0) //Mientras que no encontremos el fin de cadena { cadena[i] = toupper(cadena[i]); //Convertimos a mayusculas cada caracter i++; } Luego podras usar la funcin strcmp(), que se encuentra en el archivo de cabecera "cstring", as: if(strcmp("NEGRO", cadena) == 0) //Si la cadena contiene la palabra NEGRO n = 1; else if(strcmp("BLANCO", cadena) == 0) n = 2; Y as con todos los colores que ocupes. Y recuerda incluir los archivos de cabecera ctype y cstring, as: #include <ctype> #include <cstring>
Otra cosa, los 2 comentarios anteriores que te dieron no estan en C++, sino en C; y el ultimo comentario slo funcionara en turbo c, no en Dev-C porque usa archivos de cabecera privativos de borland. Mejor no les hagas caso a esos comentarios que te pusieron. Y lo que menciona Uriel sobre la clase string es muy cierto XD, tu decides. Saludos.