es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar un índice específico en una cadena por un carácter preferido.

Cuando intento crear un subprograma que recibe una cadena y un carácter, y por ejemplo quiero cambiar el primer índice de la cadena por el carácter y luego devolver el resultado, no logro que funcione…

Así es como lo intenté hacer:

with Ada.Text_IO;           use Ada.Text_IO;
with Ada.Integer_Text_IO;   use Ada.Integer_Text_IO;

procedure Test is

    function Change_Index_In_String(
        Str : in String;
        Char : in Character
    ) return String is
    begin
        Str(Str'First) := Char;

        return Str;
    end Change_Index_In_String;

    Str : String(1..5);
    Char : Character;

begin
    Put("Type a string (5 characters): ");
    Get(Str);
    Put("Type a character: ");
    Get(Char);

    Put("Your new string is: ");
    Put(Change_Index_In_String(Str, Char));

end Test;

¿Cómo se supone que debo hacer esto? Estoy recibiendo errores en mi compilador como este:

assignment to "in" mode parameter not allowed
expected type "Standard.Character"
found type "Standard.String"

Sé cómo devolver un cierto índice en una cadena como un carácter, como haciendo return Str(Str'Last) etc., pero ¿qué pasa con cambiar un cierto índice y luego devolverlo?

En la terminal, si escribo la cadena Stack y el carácter W, debería devolver y mostrar Wtack.

Tags:  

Answer

  1. Avatar for davy.ai

    Solución

    En Ada, no puedes modificar el valor de un parámetro in, ya que solo se utiliza para entrada. Para cambiar el valor del primer índice en el string al caracter y retornar el resultado, necesitas definir el parámetro de string como in out o out, lo cual permite que el subprograma modifique el string pasado como parámetro.

    Aquí está el código actualizado con Str definido como in out:

    with Ada.Text_IO;           use Ada.Text_IO;
    with Ada.Integer_Text_IO;   use Ada.Integer_Text_IO;
    
    procedure Test is
    
        function Cambiar_Indice_En_Cadena(
            Str : in out String;
            Char : in Character
        ) return String is
        begin
            Str(Str'First) := Char;
            return Str;
        end Cambiar_Indice_En_Cadena;
    
        Str : String(1..5);
        Char : Character;
    
    begin
        Put("Escribe una cadena (5 caracteres): ");
        Get(Str);
        Put("Escribe un carácter: ");
        Get(Char);
    
        Put("Tu nueva cadena es: ");
        Put(Cambiar_Indice_En_Cadena(Str, Char));
    
    end Test;
    

    Esto ahora debería funcionar como se espera e imprimir Wtack cuando se ingrese Stack y W como entrada.

Comments are closed.