4. Variables de texto (strings y chars)

 

Variables de texto de clase “cadena” (strings)

Matlab es también capaz de tratar con variables de texto. Por ejemplo, la siguiente sintaxis guarda la frase “Estás usando el programa Matlab” dentro de la variable txt:

Creación de variables de tipo cadena

>> txt = "Estás usando el programa Matlab"
txt = 

    "Estás usando el programa Matlab"

Nótese que para definir la variable txt hemos escrito el texto entre comillas dobles. Cuando se usa esta clase de comillas, la variable que se crea es de clase “string” (cadena):

Cómo ver de qué clase es una variable

>> class(txt)
ans= string

Las variables de texto de tipo cadena (string) se pueden organizar en vectores o matrices igual que si fuesen números. Por ejemplo:

Construcción de un vector de texto string

>> palabras = ["esto", "es", "un", "vector","de","texto"]
palabras = 

  1×6 string array

    "esto"    "es"    "un"    "vector"    "de"    "texto"

Podemos seleccionar elementos de este vector de la manera habitual en matlab:

Selección de elementos de un vector de texto

>> palabras(1)
ans=
  "esto"

 

>> palabras(4)
ans=
  "vector"

 

>> palabras(2:4)
ans = 

  1×3 string array

    "es"    "un"    "vector"

 

La variable MP que definimos a continuación es una matriz de texto de clase string (pues utilizamos dobles comillas):

Construcción de una matriz de texto string

>> MP = ["Esto" "es"; "una" "matriz"; "de" "palabras"]
MP = 

  3×2 string array

    "Esto"    "es"      
    "una"     "matriz"  
    "de"      "palabras"
>> MP(2,:)
ans = 

  1×2 string array

    "una"    "matriz"
>> MP(3,2)
ans = 

    "palabras"

 

Se puede utilizar el operador suma para combinar varias cadenas en una sola:

>> "programar " + "es " + "fácil"
ans = 

    "programar es fácil"

Obsérvese que para que queden espacios entre las palabras ha habido que dejarlos explícitamente entre comillas.

 

Variables de texto de clase “carácter” (char)

Si queremos acceder individualmente a los caracteres que componen una variable de clase string, primero hemos de convertir dicha variable a clase char (carácter). Por ejemplo, para convertir nuestra variable inicial txt a carácter, basta con emplear la función char():

Conversión de string a char

>> txt = "Estás usando el programa Matlab";
 t = char(txt) 
t =

    'Estás usando el programa Matlab'

En principio lo único que parece haber sucedido es que la variable t es igual que la variable txt salvo que ahora tiene comillas simples en vez de dobles; ello indica que t es de clase char como podemos comprobar fácilmente:

>> class(t)
ans =

    'char'

Las variables de clase char se comportan como si fueran vectores de caracteres (letras, números, espacios u otros símbolos) consecutivos. Para seleccionar parte del texto basta indicar las posiciones a extraer; así, si queremos extraer las letras desde la posición 7 a la 13 del texto guardado en t bastaría con ejecutar:

Selección de caracteres dentro de un texto

>> t(7:13)
ans =

    'usando '

La función size nos da las dimensiones de t:

>> size(t)
ans =

     1    31

es decir, t es una matriz de 1 fila por 31 columnas (que es el número de caracteres que contiene).

Las variables de tipo carácter (char) se pueden declarar también directamente usando comillas simples:

Creación directa de variables tipo char

>> t2 = 'Matlab es un lenguaje curioso'
t2 =

    'Matlab es un lenguaje curioso'

Concatenación de strings uno junto a otro. Para concatenar dos variables de tipo carácter en un vector fila, basta usar corchetes igual que cuando se concatenan vectores numéricos:

>> [t ". " t2]
ans =

    'Estás usando el programa Matlab. Matlab es un lenguaje curioso'

Obsérvese que hemos añadido “.” para que aparezca la separación entre las dos frases.  

Concatenación de strings uno sobre otro. Para concatenar dos variables de tipo carácter en un vector columna, deben tener la misma longitud; ya sabemos que t tiene longitud 31; la variable t2 tiene dimensiones:

>> size(t2)
ans =

    1   29

Como esta segunda frase tiene 29 caracteres, podemos añadirle dos espacios, para que tenga también 31 caracteres y así añadirla en una matriz junto con la frase t:

>> t2 = 'Matlab es un lenguaje curioso  ';
 TT=[t;t2]
TT =

  2×31 char array

    'Estás usando el programa Matlab'
    'Matlab es un lenguaje curioso  '

TT es ahora una matriz de dimensión 2x31. Si seleccionamos, por ejemplo, las columnas de la 15 a la 20 obtenemos:

>> TT(:, 15:20)
ans =

  2×6 char array

    'l prog'
    'enguaj'

 

Funciones más habituales para operar con variables de texto:

>> strlength("¿Cuantos caracteres tiene esta frase?")
ans =

    37

 

>> int2str(123456)
ans =

    '123456'

 

>> num2str(2.13456,2)
ans = 2.1
>> num2str(2.13456,4)
ans = 2.135
>> num2str(21345.36,2)
ans = 2.1e+04

Podemos extraer los términos del 4 al 8, por ejemplo, de la expresión anterior:

>> a=num2str(21345.36);
 a(4:7)
ans = 45.3

Veamos el resultado de aplicar la función str2num() a una matriz numérica:

>> a = num2str([1 2 3])
a = 1  2  3

Vemos que a es ahora una matriz de caracteres de dimensión \(1\times7\)

>> size(a)
ans =

   1   7

Veamos quienes son los sucesivos términos de a:

>> a(1)
ans = 1
>> a(2)
ans =  
>> a(3)
ans =  
>> a(4)
ans = 2

Nótese que al convertir la matriz [1 2 3] en caracteres, Matlab considera que entre cada dos valores hay dos espacios en blanco.

 

 

 

>> a = mat2str([1 2 3]);
 a(1)
ans = [

 

 

>> a="Hola";
 b="hola";
 strcmp(a,b)
ans = 0
>> strcmpi(a,b)
ans = 1
>> a==b
ans =

  0  1  1  1

 

 

 

Ejercicios

  1. Escribe un script para calcular la letra del DNI. El algoritmo para dicho cálculo, tal como se describe en [Wikipedia] (https://es.wikipedia.org/w/index.php?title=DNI_(Espa%C3%B1a)) es el siguiente:
  1. Dividir el número del DNI dividido entre el número 23.

  2. Al resto resultante de dicha división, que está comprendido entre 0 y 22, se le asigna la letra según la tabla siguiente:

 

  1. Los códigos de barras de la norma EAN-13 están formados por 12 dígitos más un último dígito de control. El dígito de control se calcula del siguiente modo a partir de los 12 primeros dígitos:

Escribe un script de matlab que reciba como entrada un valor n compuesto por los 12 dígitos del código de barras y que devuelva como salida el dígito de control.

A modo de ejemplo, los dígitos del código de barras siguiente:

son las doce primeras cifras mostradas, 123456789123, y el dígito de control es la última cifra, en este caso un 1)

 

 

Soluciones a los Ejercicios