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
.
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 comoin out
oout
, lo cual permite que el subprograma modifique el string pasado como parámetro.Aquí está el código actualizado con
Str
definido comoin out
:Esto ahora debería funcionar como se espera e imprimir
Wtack
cuando se ingreseStack
yW
como entrada.