I'm having an issue with my programming assignment where I cycle through a string and sum the integer value of character. As the following code states. Now I pass a string into this subroutine. For example given
num := '8888';
Expected Output would be
32
Resulting output is
-12
I'm using fpc pascal compiler on a Linux environment. Any insight as to why this is occurring would be much appreciated
procedure subRoutine1(num : string);
var
i : byte;
value : integer;
sum : integer;
begin
sum := 0;
for i := 0 to length(num) do
begin
value := In开发者_开发百科teger(num[i]) - 48;
sum := sum + value;
end;
writeln(sum);
end;
The bug is that the loop should start with with 1, not 0.
for i := 0 to length(num) do...
should be
for i := 1 to length(num) do
Pascal strings have the first byte containing the length of the string.
in other words, num[0] contains the value 4 (string is 4 characters long)which gives -44 after subtracting 48, throwing off your expected sum value.
So your program iterates over the following values
4 --> -48 = -44
56 --> -48 = 8
56 --> -48 = 8
56 --> -48 = 8
56 --> -48 = 8
sum = -12
Also as suggested in other answers, do use the Ord() function rather than a cast to Integer, i.e. use
value := Ord(num[i]) - 48;
or even better,
value := Ord(num[i]) - Ord('0');
精彩评论