You are on page 1of 6

Entrada y salida sobre cadenas de caracteres

:

Las cadenas de caracteres almacenan información tal como nombres de archivos, títulos de libros,
nombres de empleados, y otras combinaciones de caracteres.

C++ guarda las cadenas de caracteres en un arreglo del tipo char que termina con un caracter nulo
(NULL), por lo tanto, para declarar una cadena de caracteres simplemente se declara un arreglo de
tipo char con los suficientes elementos como para contener los caracteres deseados. Por ejemplo,
la siguiente declaración crea un nombre de variable de cadenas de caracteres “nombre_archivo”
capaz de almacenar 13 caracteres (el caracter NULL es uno de estos 13): char
nombre_archivo[13];

La diferencia principal entre las cadenas de caracteres y otros tipos de arreglos es cómo C++ indica
el final del arreglo.

Este final se representa utilizando un caracter NULL (NULO), que C++ representa con el caracter
especial “\0”. Cuando se asignan caracteres a la cadena, se debe poner el caracter null después del
último elemento.

¿Cómo inicializar una cadena de caracteres?
Para inicializar una cadena de caracteres en la declaración, simplemente se especifica la
cadena deseada encerrándola entre comillas, ej: char titulo[40] = “Aprenda C++”;

Si el número de caracteres asignado a la cadena es menor que el tamaño del arreglo, la
mayoría de los compiladores del C++ asignarán caracteres NULL al resto de la cadena.

Los arreglos, si no se especifica el tamaño de la cadena, el compilador de C++ asignará la
suficiente memoria como para contener las letras especificadas, más el caracter NULL. Ej:
char titulo[] = “Aprenda C++”;

Entrada/salida de strings, función setw

En la entrada

Es posible asignar una cadena a un arreglo de caracteres utilizando cin y setw como sigue

int main()
{
char palabra[20];
cin>>setw(20)>>palabra;
return 0;
}
La instrucción previa lee los caracteres hasta que encuentre un espacio, tabulación ́ o salto de
línea o hasta que se lean 19 caracteres.

cout<<“Ingrese 2do string\n”. Se podría dar el caso de que quisiéramos “consumir” toda la entrada en cada operación d́ e entrada de un programa. cout<<“Ingrese 1er string\n”.c. El programa para consumir la entrada restante luego de una lectura es: int main() { char s1[10]. si tuviera el siguiente trozo de programa: char s1[10]. while ((c=getchar())! =’\n’). los restantes caracteres quedan en el flujo de entrada (ser í ngresados en la próxima instrucción ́ de entrada).s2[5]. return 0. por ejemplo. nueva línea y tabuladores que encuentre en la entrada. Si se ingresan más de i caracteres. cout<<s1<< <<s2<<”\n”. si ingresara m á s de 10 caracteres. si ingreso 4 hola que tal se ingresaría hola que en el 1er string y tal en el segundo. Usamos setw para la entrada de strings de caracteres. cin>>setw(5)<<s2. } El while consumirá la entrada hasta el nueva línea. Para consumir toda la entrada en cada instrucción de entrada tendría que agregar por ejemplo una instrucción ́ while que consumiera toda la entrada hasta el nueva línea. Estos quedan de la primera instrucción para la segunda. cin>>setw(5)>>s2. o si ingresara dos palabras separadas por blanco. Si ingreso “hola” seguido de 3 caracteres blancos el segundo cin lee blancos y el nueva línea o sea no lee nada. Si se ingresan menos de 19 caracteres y espacio (o tabulación ́ o fin de línea) se coloca el ’\0’ después del último carácter leído. setw(i) indica que se consideren i caracteres de la entrada. La instrucción cin saltea los blancos. s2[5]. cout<< Ï ngrese 1er string\n”. tabulador o nueva línea. cout<<Ingrese 2do string\n”. Si ingresara hola que tal ingresar ı́ a hola en el primer string y que en el segundo. cin>>setw(10)>>s1. cin>>setw(10)>>s1.La posición número 20 se reserva para el carácter de fin de string que es ’\0’. . system(”PAUSE”). Por ejemplo. leería en ambos strings.

i=876. un archivo es una colección de datos almacenados en algún lugar. return 0. que son miembros de los objetos ( stream ) para entrada y salida estándar. Función Descripción bad true si ha ocurrido un error . system(”PAUSE”). son aplicables a los streams que usemos para trabajar con archivos en disco y/o cualquier otro dispositivo de almacenamiento. 5 Si tiene más de n posiciones el campo se extiende para acomodar el valor completo. En C++. En el caso de punto flotante necesitamos setear algunas banderas (lo veremos m á s abajo). caracteres. punto flotante. Observar que podemos utilizar setw en la salida. } Si la salida tiene menos de n posiciones de manera predeterminada queda alineada a la derecha en el campo. Ejemplo: int main() { cout<<setw(2)<<“hola que tal”. return 0. los atributos de banderas y manipuladores. system(”PAUSE”). Ejemplo: int main() { int i. Control de estado del stream: Por definición. Mostraremos una tabla. para la impresión de distintos tipos de datos (enteros. Para utilizar setw debemos incluir el archivo <iomanip>. el programador puede considerar que un archivo es un stream. En el ejemplo anterior se imprime 876 en un campo de ancho 5 justificado a la derecha. Este punto es de suma importancia. de los métodos aplicables a los streams. strings).En la salida Es posible imprimir un valor en un campo de un ancho de n caracteres utilizando setw(n). cout<<setw(5)<<i. } Imprime “hola que tal “justificado a la izquierda.

clear limpia las banderas de estado (status flags) close cierra un stream eof true si se alcanzó el fin de archivo fail true si ha ocurrido un error fill establecer manipulador de carácter de relleno flags accesa o manipula las banderas de formato de un stream flush vaciar el buffer de un stream gcount número de caracteres leidos durante la última operación de entrada get lectura de caracteres getline lectura de una línea de caracteres good true si no ha ocurrido un error ignore leer y descartar caracteres open abrir un stream de entrada y/o salida peek verifica la siguiente entrada de carácter precision manipula la precisión del stream put escritura de caracteres putback regresar caracteres al stream rdstate regresa la bandera de estado de stream .

printf("Estoy escribiendo en pepe. el siguiente open que se realice asignará al fichero abierto el descriptor 1. ¿Cómo lograr esto? Pues teniendo en cuenta que el algoritmo de la llamada open reserva el primer descriptor disponible. empezando a explorar desde el número cero. open ("pepe. Sirva de ejemplo este código: close (1).read lee datos de un stream hacia un buffer seekg realiza acceso aleatorio sobre un stream de entrada seekp realiza acceso aleatorio sobre un stream de salida setf cambiar las banderas de formato tellg lee el puntero del stream de entrada tellp lee el puntero del stream de salida unsetf limpiar las banderas de formato width accesa y manipula la longitud minima del campo write escritura datos desde un buffer hacia un stream Redirigir flujos predefinidos: Para redirigir la entrada o la salida hay que conseguir abrir el fichero de redirección de forma que el sistema le asigne el handle 0 ó 1.txt\n").txt".O_CREAT. .0777). quedando automáticamente reasignada la salida estándar. Esto significa que si cerramos la salida estándar (descriptor número 1).

Cualquier nueva operación sobre la salida estándar se dirigirá al fichero "pepe.webs.pdf .pdf https://www. http://sopa.HTM http://formella.py/escritorio/c/arreglos-y-cadenas-en-c https://www.edu.uy/tecnoinf/mvd/cursos/eda/material/teo/EDA-teorico14.uvigo. (Suponiendo que el descriptor 0 no esté libre).es/doc/cplus/StreamsC++.fing.dis.com.txt".es/prog_c/REDIRE.ulpgc.programacion.