求和数字字符串

时间:2010-02-01 03:11:11

标签: string indexing pascal

我的编程任务有问题,我循环一个字符串并对字符的整数值求和。如下面的代码所述。现在我将一个字符串传递给这个子程序。例如给出

num := '8888';

预期输出

32

结果输出

-12

我在Linux环境中使用fpc pascal编译器。任何关于为什么会发生这种情况的见解都将非常感激

   procedure subRoutine1(num : string);
   var
     i : byte;
     value : integer;
     sum : integer;
   begin
     sum := 0;
     for i := 0 to length(num) do
     begin
       value := Integer(num[i]) - 48;
       sum := sum + value;
     end;
     writeln(sum);
   end; 

1 个答案:

答案 0 :(得分:3)

错误是循环应该从1开始,而不是0。

for i := 0 to length(num) do...
should be
for i := 1 to length(num) do

Pascal字符串的第一个字节包含字符串的长度 换句话说,num [0]包含值4(字符串长度为4个字符),在减去48之后给出-44,抛弃预期的总和值。

所以你的程序迭代以下值

  4  -->  -48   =  -44
 56  -->  -48   =  8
 56  -->  -48   =  8
 56  -->  -48   =  8
 56  -->  -48   =  8
            sum = -12

同样如其他答案所示,请使用Ord()函数而不是强制转换为Integer,即使用

   value := Ord(num[i]) - 48;
or even better,
  value := Ord(num[i]) - Ord('0');