Ada: Palindromproblem, ta bort mellarum ur strings
Hej,
TL;DR: Hur tar jag bort mellanrum ur meningar i Ada
Sitter och skall programera ett program som tar en mening och kontrollerar om denna mening är ett palindrom(dvs går att läsa framlänges och baklänges).
Jag har dock stött på lite problem då jag skall ta bort eventuella mellanrum i meningarna.
Här är min kod:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
Procedure lab2_uppgift2 is
Recieve : String(1..50);
I : Integer := 0;
V : Integer := 1;
H : Integer := 0;
Z : Integer := 0;
Space : Integer := 1;
Done : Boolean := False;
--Buffer : String(1..50);
begin
Get_Line (Recieve,H);
Put (H);
Z := H;
New_Line;
Put (Recieve);
New_Line;
New_Line;
New_Line;
loop
if Space <= Z then
if Recieve (Space) = ' ' then
Recieve(Space .. 50) := Recieve((Space + 1) .. 50);
Space := Space + 1;
-- Put (Recieve);
elsif Space = Z then
Recieve := Recieve(1..(Recieve'Last));
Done := True;
else
Space := Space + 1;
end if;
if Done = True then
if Recieve(V) = Recieve(H) then
Put_Line (Recieve (V) & " " & Recieve (H));
New_Line;
if V = Z then
Put_Line ("Palindrom");
exit;
end if;
V := V + 1;
H := H - 1;
else
Put_Line ("Meningen är inte ett palindrom");
exit;
end if;
end if;
end if;
end loop;
Är medveten om att koden är ganska kladdig, är än så länge fortfarande nybörjare inom Ada.
Problemet är, att när jag då kör den första biten kod som går igenom meningen efter mellanrum är att jag får ett errormeddelande:
raised CONSTRAINT_ERROR : lab2_uppgift2.adb:27 length check failed
Och jag har inte lyckats hitta vad detta innebär.
Den uppmärksamme har sett att jag har försökt pilla lite med Ada.String.Unbound paketet där det finns en funktion som heter Delete. Denna funktion skall tydligen kunna ta bort saker som oönskade mellanrum etc. Jag har dock inte lyckats hitta någon vettig dokumentation om det hela som förklarar de tre olika parametrarna.
Jag tycker dock att min lilla kodsnutt borde fungera, men det gör den ju då inte.... Är det någon vänlig själ som vill slänga ett öga på koden och kanske upplysa mig om något misstag jag gjort?
/Alex