Saltar al contenido principal
LibreTexts Español

5.2: Caracteres y Matrices de Índice Único de Carácter (Cadenas)

  • Page ID
    87467
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    Nuestro enfoque está en los métodos numéricos y por lo tanto no tendremos demasiada demanda de procesamiento de caracteres y cadenas. Sin embargo, es bueno conocer los conceptos básicos, y hay instancias —típicamente relacionadas con aplicaciones más sofisticadas de administración de sistemas de software, “códigos que escriben códigos” (o menos dramáticamente, códigos algunas líneas de los cuales se pueden modificar de un caso a otro), y también la manipulación simbólica —en la que carácter los conceptos pueden jugar un papel importante. Tenga en cuenta que la manipulación de personajes y la manipulación simbólica son muy diferentes: la primera no atribuye ningún significado matemático a los personajes; la segunda se construye sobre la primera pero ahora agrega reglas matemáticas de compromiso. Consideramos aquí solo la manipulación de personajes.

    Una variable de carácter (una instancia del tipo de datos de carácter), digamos c, debe representar una letra numérica. Como siempre, c en última instancia debe ser almacenado (en última instancia) por 0 y 1. Por lo tanto, necesitamos —como parte de la definición del tipo de datos— una codificación de diferentes caracteres en términos de 0 y 1. La codificación más común de este tipo, el código ASCII original, es un mapeo de palabras de 8 bits (números binarios) al conjunto de letras en el alfabeto, números, signos de puntuación, así como algunos caracteres especiales o de control. (Ahora hay muchos códigos ASCII “extendidos” que incluyen símbolos de idiomas distintos al inglés).

    Podemos crear y asignar una variable de carácter como

    >> c = '3'
    c =
        3
    >> c_ascii = int8(c)
    c_ascii =
        51
    >> c_too = char(c_ascii)
    c_too =
        3
    >>
    

    En la primera declaración, ingresamos los datos de un solo carácter con comillas —lo que le dice a Matlab que 3 debe interpretarse como un carácter y no como un número. Entonces podemos obtener el código ASCII para el número 3 —que pasa a ser 51. Luego podemos recrear la variable de carácter c apelando directamente al código ASCII con el comando char. Obviamente, las cotizaciones son más fáciles que memorizar el código ASCII. Una “cadena” es simplemente una matriz de un solo índice de elementos de carácter. Podemos introducir una cadena más 83 fácilmente con la función de comillas:

    >> pi_approx_str = '3.1416'
    pi_approx_str =
        3.1416
    >> pi_approx_str(2)
    ans =
    .
    >> pi_approx_str + 1
    ans =
        52     47     50     53     50     55
    >>
    

    Destacamos que pi_approx_str no es de tipo double y si intentamos (digamos) agregar 1 a pi_approx_str obtenemos (efectivamente) nonsense: Matlab agrega 1 a cada elemento de la ASCIITranslation de la cadena our según las reglas de adición de matriz single—index.

    Podemos concatenar fácilmente cadenas, por ejemplo:

    >> leader = 'The value is '
    leader =
    The value is
    >> printstatement = [leader,pi_approx_str,' .']
    printstatement =
    The value is 3.1416 .
    >>
    

    Sin embargo, esto es de uso limitado ya que normalmente conoceríamos una aproximación a π no como una cadena sino como doble.

    Afortunadamente, hay algunas funciones de conversión simples disponibles en Matlab (y otros lenguajes de programación también). La función de Matlab num2str tomará un número de punto flotante y lo convertirá a la cadena de caracteres correspondiente; a la inversa, str2num tomará una cadena (presumiblemente de códigos ASCII para números) y la convertirá al tipo de datos de punto flotante (double) correspondiente. Entonces, por ejemplo,

    >> pi_approx_double = str2num(pi_approx_str)
    pi_approx_double =
        3.1416
    >> pi_approx_str_too = num2str(pi_approx_double)
    pi_approx_str_too =
        3.1416
    >>
    

    Esto se puede usar para crear una declaración de impresión basada en un valor de punto flotante (por ejemplo, obtenido como parte de nuestros cálculos numéricos):

    >> printstatement_too = [leader,num2str(pi_approx_double),' .']
    printstatement_too =
    The value is 3.1416 .
    >>
    

    En la práctica real hay funciones de impresión de nivel superior (como fprintf y sprintf) en Matlab construidas sobre los conceptos aquí descritos. Sin embargo, las construcciones de nivel más bien bajo anteriores también pueden servir, por ejemplo, para desarrollar un título para una figura que debe cambiar a medida que (digamos) cambia el tiempo al que corresponde la trama.


    This page titled 5.2: Caracteres y Matrices de Índice Único de Carácter (Cadenas) is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by Masayuki Yano, James Douglass Penn, George Konidaris, & Anthony T Patera (MIT OpenCourseWare) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.