Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutorial de Cadenas de Texto en C
Tutorial de Cadenas de Texto en C
S
Cadena
Carcter
Cadena de caracteres
Y eso es! Su nombre no haba sido tan tonto. Una de texto o cadena de caracteres es una unin
de caracteres con las que podemos formar palabras, frases, etc. Cada eslabn de la cadena
corresponde a un carcter. En ese dibujo trucho, tenemos una cadena de 3 caracteres: SOL.
Con las cadenas de texto podemos representar palabras, frases, etc en la compu, as no solo
tenemos que batirnoslas con nmeros.
Concatenacin
La concatenacin es la accin de unir cadenas de texto. Por ejemplo si tenemos la palabra
Lupita y le concatenamos Ferrer tenemos la nueva cadena LupitaFerrer.
Copia de cadenas
Cmo haramos si quisiramos almacenar el nombre y el apellido seguidos en una sola variable?
Pues usamos una concatenacin. Esta accin une dos cadenas, como se indic ms arriba.
Para concatenar dos cadenas se usa la funcin strcat de string.h.
strcat(destino, cad2);
Esta funcin aade cad2 al final de destino, resultando la unin en destino.
Chino? Mejor probar este ejemplo:
#include<iostream>
using namespace std;
int main(){
char nombre[60];
char apellido[30];
cout<<"Nombre: "; cin>>nombre;
cout<<"Apellido: "; cin>>apellido;
strcat(nombre, apellido);
cout<<nombre<<endl;
cout<<"Hola "<<nombre<<endl; //Ojo, no imprimimos apellido
system("pause");
return 0;
}
Resultado de la ejecucin del programa:
Nombre: Lupita
Apellido: Ferrer
LupitaFerrer
Hola LupitaFerrer
Ok, funciona como queramos, pero. a la m la concatenacin se ha guardado en la variable
nombre!. Por eso no podramos imprimir el nombre suelto de nuevo .
Cmo podramos guardar el valor del nombre para no perderlo? Cmo podriamos hacer lo
siguiente, en C?
copiaNombre nombre
cad1=cad2
(Disculpa la truchedad del dibujo)
Qu pasa si queremos saber qu cadena es mayor que otra, por ejemplo para saber quien debera
ir tras de quin en la lista del curso?
Pues todas esas operaciones de comparacin se hacen con la funcin strcmp.
strcmp(cad1, cad2);
Esta funcin, retorna un 0 cuando las cadenas son iguales (cad1=cad2), retorna un nmero
positivo cuando cad1>cad2 y retorna un nmero negativo cuando cad1<cad2.
Veamos la comparacin de cadenas cuando queremos saber si son simplemente iguales o
diferentes:
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char password[30];
char password2[30];
cout<<"CAMBIO DE CONTRASEA"<<endl;
cout<<"Indique su nueva contrasea: ";
cin>>password;
cout<<"Repita su contrasea: ";
cin>>password2;
if(strcmp(password, password2)==0) //Si es 0 son iguales
{
cout<<"Aceptado. Contraseas iguales."<<endl;
}
else
{
cout<<"Invlido. Contraseas diferentes."<<endl;
}
system("pause");
return 0;
}
Este es el resultado de la ejecucin del programa
cad2)
cad3)
cad1)
cad3)
cad1)
cad2)
<<endl;
<<endl;
<<endl;
<<endl;
<<endl;
<<endl;
system("pause");
return 0;
}
El resultado es:
Drogas vs. Drogas=0
Drogas vs. Rock 'n Roll=-1
Drogas vs. Drogas=0
Drogas vs. Rock 'n Roll=-1
Rock 'n Roll vs. Drogas=1
Rock 'n Roll vs. Drogas=1
Como se puede apreciar, si la primera cadena es alfabticamente posterior (mayor) a la segunda,
se retorna un nmero positivo (1). Cuando son iguales, retorna un 0 y si la primera cadena es
anterior (menor) a la segunda, se retorna un nmero negativo (-1).
Pos
T E Q U I L A
0
1
2
3
4
5
6
7
cad[0]
C O N S A L \0
8
9
10 11 12 13 14 15 16 17 18 19
cad[6]
cad[11]
cad[16]
Como se puede ver en cad[0] tenemos la T, en cad[11] tenemos una N y en cad[16] tenemos
el carcter terminador.
Probmoslo con un programa:
#include<iostream>
using namespace std;
int main(){
char cad[20];
strcpy(cad, "TEQUILA CON SAL");
cout<<cad<<endl;
cout<<cad[0]<<endl;
cout<<cad[6]<<endl;
cout<<cad[10]<<endl;
cout<<cad[15]<<endl;
return 0;
}
Al ejecutar obtenemos:
Ejemplos:
Programa que muestra los caracteres en posiciones pares:
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char cad[20];
int i;
strcpy(cad, "TEQUILA CON SAL");
cout<<cad<<endl;
for(i=0; i<=strlen(cad)-1; i++)
{
if(i%2==0)
{
cout<<cad[i]<<endl;
}
}
system("pause");
return 0;
}
Resultado:
TEQUILA CON SAL
T
Q
I
A
C
N
S
L
Otra forma sera cambiar el for de arriba para no tener que poner -1, podemos hacerlo con <. O
sea:
for(i=0; i<strlen(cad); i++)
Ya que la parte central del for es la condicin de repeticin. De hecho esta es la forma ms
habitual de recorrer una cadena.
#include<iostream>
using namespace std;
int main(){
char cad[20];
int i;
strcpy(cad, "TEQUILA CON SAL");
}
Pa probar esto y matar dos pjaros de un tiro, mostremos los valores ASCII de cada carcter:
TEQUILA CON SAL
84
69
81
85
73
76
65
32
67
79
78
32
83
65
76
Programa para saber si el ltimo carcter de una cadena es igual al primero:
using namespace std;
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char cad[20];
cout<<"Ingrese una cadena: ";
cin>>cad;
int ult = strlen(cad)-1;
if(cad[0]==cad[ult])
{
cout<<"Si son iguales"<<endl;
}
else
{
cout<<"No son iguales"<<endl;
}
Ejemplo:
Leer el nombre de un archivo y determinar la extensin de este. O sea, si se ingresa tarea.txt, el
programa debe desplegar txt.
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char arch[20];
cout<<"Ingrese el nombre del archivo: ";
cin>>arch;
int n = strlen(arch);
//Buscamos un punto desde el final (en reversa)
int i=n-1;
while(arch[i]!='.')
{
i--;
}
//Ahora en i tenemos almacenada la posicion del punto
i++;
//Procedemos a copiar desde ahi a otra cadena auxiliar
char ext[10];
int j=0;
while(i<=n)
{
ext[j] = arch[i];
i++;
j++;
}
cout<<"La extensin es: "<<ext;
system("pause");
return 0;
}
Resultado:
Ingrese el nombre del archivo: tarea.txt
La extensin es: txt
Caracteres escapados
Que nombre mas raro no?... Hay ciertos caracteres especiales que deben ser antepuestos con una \
en una cadena de texto:
Carcter de tabulacin
Salto de lnea
Barra invertida (\)
Comilla simple
Comilla doble
A eso se le llama escapar, aadirle los caracteres extra adecuados (en nuestro caso la \) para
que el carcter se muestra como queremos. Pq escapar? En bolas.
Por ejemplo, si queremos almacenar el siguiente texto:
Este
es un ejemplo
con "caracteres especiales'
debe anteponer una \ con estos
Siempre se
caracteres.
Continuar