Discussion:
Integer to String
(too old to reply)
montgrimpulo
2015-01-29 17:36:20 UTC
Permalink
Hi,

I want to solve in Ada:

from Integers (1,2,3,4,5,6) to String "123456" and then to Integer 123456,
to avoid multiplications and additions.

I tried with some Attributes and solved the second part.

with Ada.Text_IO; use Ada.Text_IO;
procedure ItoS is
package I_IO is new Integer_IO (Integer);
use I_IO;
num : integer ; char : character ; str : String(1..6);
begin
num := 7;
char := character'Val(num);
New_Line;Put("num = ");Put(num);
New_Line;Put("char= ");Put(char);
char:='7';
num:=character'Pos(char);
New_Line(2);Put("char= ");Put(char);
New_Line;Put("num= ");Put(num);
str:="123456";
num:=Integer'Value(str);
New_Line(2);Put("num= ");Put(num);
(20) str:=Integer'Image(num);
New_Line;Put("str= ");Put(str);
end ItoS;

However, the outcome is :
num = 7
char=

char= 7
num= 55

num= 123456

raised CONSTRAINT_ERROR : itos.adb:20 length check failed.
Simon Wright
2015-01-29 17:51:03 UTC
Permalink
Post by montgrimpulo
num : integer ; char : character ; str : String(1..6);
begin
str:="123456";
num:=Integer'Value(str);
New_Line(2);Put("num= ");Put(num);
(20) str:=Integer'Image(num);
raised CONSTRAINT_ERROR : itos.adb:20 length check failed.
Integer'Image prefixes the digits of the result with a '-' if the number
is negative and a space if it's positive.

You could just write

Put (Integer'Image (num));

or

num := Integer'Value ("123456");
Put_Line ("str=" & Integer'Image (num));
Jeffrey Carter
2015-01-29 19:16:36 UTC
Permalink
Post by montgrimpulo
from Integers (1,2,3,4,5,6) to String "123456" and then to Integer 123456,
to avoid multiplications and additions.
I tried with some Attributes and solved the second part.
For the first part (converting a list of Integers in 0 .. 9 to a String), you
could take the 'Image of each integer and store the digit Character in the image
into the correct position in a String.
--
Jeff Carter
"Ditto, you provincial putz?"
Blazing Saddles
86
Anh Vo
2015-01-29 20:39:23 UTC
Permalink
-- ...
New_Line(2);Put("num= ");Put(num);
(20) str:=Integer'Image(num);
New_Line;Put("str= ");Put(str);
end ItoS;
(20) should not be here. Otherwise, syntax violation is resulted. It must be cut and paste error.
num = 7
char=
The 7th character (BEL) is a controlled character. Thus, nothing is printed.
num= 123456
raised CONSTRAINT_ERROR : itos.adb:20 length check failed.
Others have already explained this exception.

Anh Vo

Loading...