Mega Code Archive

 
Categories / Delphi / Strings
 

Pulling digits out of string to sum them

How do I pull out every second digit from a string and sum them? -------------------------------------------------------------------------------- This is a rather unusual question, but it's not that hard to accomplish. What must iterate through each character of the string and "grab" the digits whose position is a multiple of two (2). There are a couple of ways to do this, but I took what I felt was the easier route. Since this is more or less a binary problem, setting a Boolean value with each iteration works nicely. Here's the logic: For all "odd" positions, set Boolean value to False; For all "even" positions, set Boolean value to True; If the Boolean value is true, grab that character and add it to a temporary buffer. Iterate through the buffer, and convert each character to an Integer while adding the converted value to an integer variable. Here's the code that accomplishes the above: function AddEvenOrOddChars(S : String; OddOrEven : Boolean) : Integer; var I : Integer; evn : Boolean; buf : String; begin Result := 0; {If OddOrEven was passed as True, then the all odd positions will be grabbed and summed. If False, then all even positions will be grabbed and summed.} evn := EvenOdd; {First grab the even position characters} for I := 1 to Length(S) do begin if evn then buf := buf + S[I]; {Set boolean to its opposite regardless of its current value. If it's currently true, then we've just grabbed a character. Setting it to False will make the program skip the next one.} evn := NOT evn; end; {Now, iterate through the buffer variable to add up the individual values} for I := 1 to Length(buf) do Result := Result + StrToInt(buf[I]); end;