Here is the solution in Delphi, I note that Edit1 and Edit2 expect a valid string, with the format:
ggº mm' ss"
procedure TForm1.Button1Click(Sender: TObject);
function GetValorNumerico(const P_Texto: string; const P_Caracter: Char): Integer;
begin
case P_Caracter of
'º': Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1)));
'''': Result := StrToInt(Trim(Copy(P_Texto, Pos('º', P_Texto)+2, 2)));
'"': Result := StrToInt(Trim(Copy(P_Texto, Pos('''', P_Texto)+2, 2)));
end;
end;
var
W_Graus1: integer;
W_Minutos1: integer;
W_Segundos1: integer;
W_Graus2: integer;
W_Minutos2: integer;
W_Segundos2: integer;
W_Graus3: integer;
W_Minutos3: integer;
W_Segundos3: integer;
begin
W_Graus1 := GetValorNumerico(Edit1.Text, 'º');
W_Minutos1 := GetValorNumerico(Edit1.Text, '''');
W_Segundos1 := GetValorNumerico(Edit1.Text, '"');
W_Graus2 := GetValorNumerico(Edit2.Text, 'º');
W_Minutos2 := GetValorNumerico(Edit2.Text, '''');
W_Segundos2 := GetValorNumerico(Edit2.Text, '"');
if W_Segundos1 < W_Segundos2 then
begin
Dec(W_Minutos1);
Inc(W_Segundos1, 60);
end;
W_Segundos3 := W_Segundos1 - W_Segundos2;
if W_Minutos1 < W_Minutos2 then
begin
Dec(W_Graus1);
Inc(W_Minutos1, 60);
end;
W_Minutos3 := W_Minutos1 - W_Minutos2;
W_Graus3 := W_Graus1 - W_Graus2;
Label1.Caption := Format('%dº %d'' %d"', [W_Graus3, W_Minutos3, W_Segundos3]);
end;