Una cadena de caracteres
en C/C++ es
un array unidimensional de caracteres. En cada elemento del array se almacena
un carácter de la cadena y a continuación del último carácter se añade un
elemento más que contiene el carácter nulo.
El carácter nulo sirve como indicador de fin de cadena.
Las cadenas se declaran como un array
unidimensional de tipo char.
Por ejemplo:
char titulo[30]; //titulo
es un array de 30 caracteres como máximo.
char nombre[25]; //nombre
es un array de 25 caracteres como máximo
Los arrays de caracteres pueden inicializarse
cuando se declaran. Lo podemos hacer de dos formas: asignando valores a cada
elemento o directamente mediante un literal de tipo cadena de caracteres.
Si se inicializa elemento a elemento no es
necesario indicar el tamaño del array, el compilador asumirá que el array tiene
tantos elementos como valores iniciales hemos indicado. Si queremos que el
array pueda contener más caracteres entonces sí será necesario indicar el
tamaño total en la declaración.
Ejemplos de inicialización de
arrays de caracteres asignando valores a cada elemento:
char b[]={'L','u','n','e','s','\0'};
char c[10]={'M','a','r','t','e','s','\0'};
En este caso hemos indicado que el tamaño es 10 pero solo hemos
proporcionado 7 caracteres. Los tres elementos restantes tomarán un valor
indeterminado:
Ejemplos de inicialización de
arrays de caracteres utilizando un literal:
char
a[] = "Hola";
esta declaración crea el array:
Vemo que en este caso el carácter nulo se
añade automáticamente.
char d[10] = "ENERO";
En este caso hemos indicado que el tamaño es 10 pero el literal
solo tiene 5. El array que se crea es:
Cuando inicializamos un array de caracteres con un
literal normalmente no se indica el tamaño. El sistema asigna el tamaño de
forma automática. Esto incluye la reserva para el carácter nulo ‘\0’, que se añade automáticamente al final
de cada cadena de caracteres. El nulo se debe poner de forma manual si se
asigna carácter a carácter.
Los arrays de caracteres en C/C++ son de tamaño fijo
y longitud
variable. Esto significa que cuando declaramos un array de
caracteres tendremos que indicar el tamaño máximo del array o sea el número de
caracteres máximo que tendrá la cadena de caracteres más el carácter nulo. Pero
esto no significa que este array no se pueda utilizar para contener una cadena
más corta. El array seguirá teniendo un tamaño fijo pero su longitud será el de
la cadena que contiene en cada momento.
Por ejemplo:
char d[10] = "ENERO";
d es un array de tamaño 10, es decir, podrá
contener como máximo 10 caracteres y su longitud actual es 5.
Leer cadenas de caracteres por teclado.
Como una cadena se implementa en C++ como un array de caractres, podemos
leer por
teclado carácter a carácter utilizando el método get y asignar valores como
los demás arrays, elemento a elemento.
Ejemplo de lectura de cadena de caracteres elemento a elemento:
#include
<iostream>
using
namespace std;
int main(void)
{
char cadena[10];
int i;
for(i=0;i<9;i++) // máximo 9 caracteres
cin.get(cadena[i]); // se lee por teclado un carácter y
// se guarda en el array
cadena[i]='\0'; // debemos añadir el
nulo al final
cout << "Ha escrito: "
<< cadena << endl;
system("pause");
}
Debemos asegurarnos de que las cadenas creadas
carácter a carácter acaban con el carácter nulo. En el ejemplo, la cadena se ha
declarado con un tamaño máximo de 10 caracteres por lo que solo se podrán
guardar 9 caracteres ya que el último se debe reservar al carácter nulo.
También podemos asignar una cadena
completa a un array de caracteres utilizando el método getline.
La forma general de uso de getline es:
cin.getline(cadena, num, carácter_final);
cadena es el array donde vamos a almacenar los
caracteres.
getline lee una serie de caracteres desde el
flujo de entrada y los almacena en la variable cadena. Se leen caracteres hasta
el final del flujo, hasta el primer carácter que coincide con el carácter_final
especificado, el cual se desecha ó hasta que se han leído num-1 caracteres.
getline añade el carácter nulo (\0) al final de
la cadena extraída.
Utilizando getline para leer por teclado la cadena del ejemplo anterior
escribiremos la instrucción:
cin.getline(cadena, 10, '\n');
El carácter final se puede omitir, si no aparece se supone que es \n :
cin.getline(nombre, 50);
Recorrer cadenas de caracteres
Por ser un array de caracteres puede recorrerse elemento a elemento
hasta encontrar el nulo.
Ejemplo: Programa C++ que lee por teclado una cadena de caracteres y la
guarda en el array cadena. A continuación lo recorre desde el principio y
muestra cada carácter por pantalla hasta que encuentra el carácter nulo.
#include
<iostream>
using
namespace std;
int main(void)
{
char cadena[30];
cin.getline(cadena,30); //lectura
de la cadena por teclado
//se asignarán 29
caracteres como máximo
//el
carácter nulo se añade de forma automática
//recorrido de la
cadena de caracteres
int i=0; //variable
índice para recorrer la cadena
while(cadena[i]!='\0') //mientras no lleguemos al nulo
{
cout << cadena[i]; //se muestra el carácter
i++; //se
incrementa el índice
}
cout << endl;
system("pause");
}
Si lo que queremos es visualizar toda la cadena, no es necesario
recorrerla carácter a carácter, simplemente podemos escribir:
cout
<< cadena;
Esta sentencia visualiza todos los caracteres de la cadena desde el
primero hasta el carácter nulo. Si la cadena la hemos creado sin poner el nulo
al final, se mostrará el contenido de la cadena seguido de basura.
Buenas tardes,estoy haciendo un ejercicio de cadenas que no termino de resolver:
ResponderEliminarEscribir un programa que, dado un array de 10 caracteres (introducidos a mano en el código), calcule cuántas veces aparece la secuencia AB. Por ejemplo, para el array
A-A-B-B-B-B-A-B-A-B
el resultado sería 3
A ver si me podeis echar una mano.
Gracias
Char caracteres [10]= (" AAGHVHBBBB");
int x, contador=0;
for(x=0;x<10;x++)
{
#include
Eliminar#include
using namespace std;
int contador(char *);
char cadena[10];
int main(){
cout<<"Hay "<<contador(cadena)<<" series :\n";
return 0;
}
int contador(char *hola){
int contar=0;
for(int i=0;i<10;i++){
if(hola[i]=='A' && hola[i+1]=='B'){
contar++;
}
}
return contar;
}
Aqui le dejo en video que explica como guardar, leer cadenas de caracteres, entre otras, espero que les sirva.
ResponderEliminarhttps://www.youtube.com/watch?v=op_XpwkBPwM&t=259s
Hola chicos, necesito que ke ayuden a resolver un programa que permita leer un correo electronico con 2 letra, 2 numeros, 2 caracteres*%- y el @ . Ejemplo lu24*%@------.--- sin el hotmail.com
ResponderEliminarhola me podrian ayudar
ResponderEliminarSuponga que la operación longitudCadena no está disponible. Escriba un algoritmo que calcule la longitud de una cadena, bajo el supuesto de que el terminador de cadena aparece en alguna casilla del arreglo.
Gente pregunta estupida :v. Como puedo concatenar una cadena de caracteres desde una posición x de otra cadena de caracteres?
ResponderEliminarCon la función strcat puedo especificar dicha posición? Ya se que esa función sirve para añadir o concatenar una cadena con otra
Pero no se a la exactitud si puedo desde una posición de la cadena
Disculpe quien me puede ayudar soy nuevo y estoy aprendiendo a programar y en c++
ResponderEliminaruna lista de 30 caracteres, cada uno representando un código quien me puede ayudar
me pueden ayudar con este ejercicio...
ResponderEliminarLlenar un arreglo con una cadena de caracteres de 20 elementos y buscar
uno posición indicada por el usuario.
Hola disculpa necesito que en un string se sumen los valores ejemplo " 12a34" y en ello indique el mayor y menor de los números y si es mayor que se multiplique por el numero factorial
ResponderEliminarhola jejeje odio a mi profesora de modulo jsjs saludos <3
ResponderEliminar