开发者

Summing Numerical Character String

开发者 https://www.devze.com 2022-12-19 05:46 出处:网络
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 e

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');
0

精彩评论

暂无评论...
验证码 换一张
取 消