ADA - Funcion Remplazar [ADA]

 
Vista:

Funcion Remplazar [ADA]

Publicado por Victor (1 intervención) el 16/11/2007 23:59:22
Bueno soy estudiante de primer año de Informatica de Gestion y tengo que hacer un ejercicio de Ada y no tengo ni pajorera idea de como hacerlo.

El ejercicio me pide que desarrolle una funcion con 3 parametros de entrada (Ristra, Mini_Ristra_1 y Mini_Ristra_2) y uno de salida, todos ellos Unbounded_String. LA funcion debe devolver el resultado de sustituir en Ristra todas las apariciones de Mini_Ristra_1 por Mini_Ristra_2.

En fín y por ahora lo que tengo esto pero esta mal.

with Ada.Strings; use Ada.Strings;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
-- Cabecera de la funcion
function Reemplazar (Frase : in Unbounded_String;
Ristra_vieja : in Unbounded_String;
Ristra_nueva : in Unbounded_String)
return Unbounded_String is
-- Variables Locales
I : Natural := 1;
Resultado : Unbounded_String;
begin
while I < Length (Frase) loop
I := Index(Frase,To_String(Ristra_vieja), I);
Resultado := Replace_Slice(Frase, I, I + Length (Ristra_vieja), To_String(Ristra_nueva));
end loop;
return Resultado;
end Reemplazar;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Función para reemplazar cadenas en una ristra

Publicado por Alejandro (155 intervenciones) el 30/06/2023 20:00:44
Puedes mejorar tu implementación utilizando un bucle `while` para buscar y reemplazar todas las apariciones de `Mini_Ristra_1` por `Mini_Ristra_2`. Aquí te muestro una solución modificada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
 
function Reemplazar(
  Frase: in Unbounded_String;
  Ristra_vieja: in Unbounded_String;
  Ristra_nueva: in Unbounded_String
) return Unbounded_String is
  Resultado: Unbounded_String := Frase;
  Start_Index: Natural := 1;
begin
  while Start_Index <= Length(Resultado) loop
    -- Buscar la próxima aparición de Ristra_vieja
    Start_Index := Index(Resultado, Ristra_vieja, Start_Index);
    exit when Start_Index = 0;  -- Salir del bucle si no se encontró más
 
    -- Reemplazar la aparición encontrada
    Replace(Resultado, Ristra_nueva, Start_Index, Ristra_vieja'Length');
    Start_Index := Start_Index + Ristra_nueva'Length';
  end loop;
 
  return Resultado;
end Reemplazar;

Esta implementación utiliza el paquete `Ada.Strings.Fixed` para reemplazar la ristra vieja por la nueva. La función `Replace` modifica directamente la ristra `Resultado` en su posición específica.

Recuerda que debes importar los paquetes `Ada.Strings.Unbounded` y `Ada.Strings.Fixed` para poder utilizar las funciones necesarias.

Puedes llamar a esta función desde tu programa principal proporcionando los parámetros necesarios y manejar el resultado según tus necesidades.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar