Textos¶
Para manejar textos utilizaremos cadenas de caracteres (strings). Un string es un array unidimensional o vector de caracteres terminado en el caracter nulo (null) que es el '\0'.
Declaracion¶
Para manejar textos declararemos una variable como un vector de tipo char.
1 |
|
En el ejemplo anterior vemos como se declara e inicializa un string que contiene la palabra "Hola". Para poder almacenar el caracter nulo de finalización es necesario que el vector tenga el tamaño de los caracteres que deseamos almacenar más uno.
Una forma alternativa de declaración e inicialización de un string equivalente a la anterior es la siguiente:
1 |
|
Utilizamos un valor literal entre comillas para inicializar el string. En ese caso no es necesario colocar el carácter nulo al final, ya lo hace el compilador por nosotros.
Lectura y escritura por consola¶
Para pedir textos por consola o escribir textos por consola podemos utilizar la funciones printf y scanf utilizando el especificador %s para ser sustituido por los datos de tipo string. Cuando ponemos el vector en el scanf no es necesario poner delante el operador & tal y como hacemos cuando pasamos vectores a funciones en otras ocasiones. Veamos un ejemplo:
Ejemplo:
1 2 3 4 |
|
Resultado:
Como te llamas ? Miguel
Hola, Miguel
En la lectura con scanf es recomendable poner un espacio antes del %s.
Podemos limitar el número de caracteres máximos que se leerán si utilizamos el especificador %s colocando en medio un número. Por ejemplo %4s solamente leerá un máximo de 4 caracteres. Veamos un ejemplo:
Ejemplo:
1 2 3 4 |
|
Ejecución 1:
Escribe palabra: DeepBlue
Palabra: Deep
Ejecución 2:
Escribe palabra: Sea
Palabra: Sea
Scanset¶
El scanset es un especificador que podemos incluir dentro de un scanf y se representa por %[ ]. Dentro de los corchetes del scanset podemos especificar un caracter, un rango de carácteres como, por ejemplo A-Z, o varios elementos de los anteriores separados por comas. Es necesario tener presente que los caracteres son sensibles a mayúsculas y minúsculas.
Cuando especificamos un scanset, solamente se leerán aquellos caracteres que cumplan con lo especificado en el scanset. Veamos un ejemplo:
Ejemplo:
1 2 3 4 |
|
Resultado:
Escribe algo: A14BaB41A
Escrito: A14B
En el ejemplo especificamos en el scanset que solamente lea carácteres de la A a la Z (en maýusculas) o bien números. Al proporcionar los caracteres "A14BaB41A" va leyendo hasta encontrar la letra a minúscula. En ese momento se detiene la lectura.
Si en el scanset especificamos en la primera posición entre los corchetes el símbolo '^', el especificador parará la lectura al encontrar la primera ocurrencia del caracter o los caracteres especificados. Veamos un ejemplo:
Ejemplo:
1 2 3 4 5 6 |
|
Resultado:
Escribe algo: A14BaB41A
Escrito: A1
Escrito: 4BaB41A
Esto es de mucha utilidad para leer frases completas hasta encontrar un salto de línea o retorno de carro. Para ello podemos utilizar el especificador %[^\n] que ira leyendo todos los caracteres hasta encontrar el caracter nueva línea '\n'.
Veamos un ejemplo de lectura del contenido de un fichero línea a línea. Supongamos que tenemos el fichero con el siguiente contenido:
Contenido del fichero 'texto.txt':
Primera linea
Segunda linea
Tercera linea
Ejemplo:
1 2 3 4 5 6 7 8 |
|
Resultado en la consola:
Primera linea
Segunda linea
Tercera linea
Lectura y escritura a un string¶
Podemos leer y escribir datos directamente sobre un string de la misma forma que podemos leer datos y escribir datos en un fichero de texto. Para ello en lugar de fscanf y fprintf (que utilizamos para ficheros) utilizaremos sscanf y sprintf. Su uso es equivalente salvo que, en lugar del puntero al fichero, especificaremos el vector de caracteres que representa el string. Veamos un ejemplo:
Ejemplo:
1 2 3 4 5 6 7 8 |
|
Resultado:
a:10
b:20
En el ejemplo leemos dos valores enteros del texto datos utilizando sscanf y los almacenamos en las variables enteras a y b. Luego escribimos un texto en la variable resultado utilizando sprintf. Por último, mostramos por consola el valor de la variable resultado. Tanto sscanf como sprintf requiren un primer parámetro que es el vector de caracteres del cual leer o escribir, un segundo parámetro que es la cadena de formato con los comodines y, a continuación, tantos parámetros como comodines para sustituir en la escritura o para recoger los valores en la lectura.
Funciones para textos¶
En la librería string.h existen varias funciones que facilitan el trabajo con textos. Para utilizarlas hemos de incluir la directiva #include <string.h>
en nuestro código.
Función strlen¶
La función strlen calcula la longitud de un string, es decir, cuantos caracteres tiene.
Ejemplo:
1 2 3 4 5 6 7 8 9 10 |
|
Resultado:
Caracteres: 4
Función strcpy¶
La función strcpy copia los caracteres de un string en otro. Pasaremos como primer argumento el string destino y como segundo argumento el string origen. También es posible utilizar la función strncpy en la cual podemos especificar un tercer argumento que es el número de caracteres a copiar.
Ejemplo:
1 2 3 4 5 6 7 8 9 10 |
|
Resultado:
Copia: Hola
Función strcat¶
La función strcat concatena los caracteres de dos strings. Le añade los caracteres del string que pasamos como segundo argumento al string que pasamos como primer argumento.
Ejemplo:
1 2 3 4 5 6 7 8 9 |
|
Resultado:
Hola mundo
Función strcomp¶
La función strcmp compara dos strings a y b devolviendo cero si son iguales, un número menor de cero si a < b y un número mayor que cero si a > b.
Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Ejecución 1:
Escribe dos palabras: casa perro
casa antes que perro
Ejecución 2:
Escribe dos palabras: perro casa
perro despues de casa
Ejecución 3:
Escribe dos palabras: casa casa
Son iguales
Función atoi¶
La función atoi convierte un texto a un tipo de dato entero (int).
Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 |
|
Resultado:
30
Función atof¶
La función atof convierte un texto a un tipo de dato con decimales (float).
Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 |
|
Resultado:
30.9