English 中文(简体)
Summing Numerical Character String
原标题:

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 := Integer(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 );
问题回答

暂无回答




相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签