Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Char To Numeric (https://www.delphipraxis.net/84753-char-numeric.html)

xSkaschY 21. Jan 2007 09:43


Char To Numeric
 
Guden zusammen,

Habe grad ein kleines Problem bei der umwandlung von Buchstaben zu Zahlen.

Undzwar möchte ich das zb. ein A in 1 oder ein AA in 27 umgewandelt wird.

Folgende funktion habe ich, die auch wunderbar mit einstelligen Buchstaben [A-Z] funktioniert, sich jedoch bei AA oder AB weigert einfach den entpsrechenden Index zu addieren.

Delphi-Quellcode:
function CharToNumeric(char: String): integer;
var numeric: integer;
    i: integer;
begin
  numeric := 0;
  for i := 1 to Length(char) do begin
    numeric := numeric + (Ord(char[1]) - 64);
  end;
  Result := numeric;
end;
Warum z.T. :wiejetzt: Addiert er nicht den Aktuellen Index??

LG Toby

dominikkv 21. Jan 2007 09:46

Re: Char To Numeric
 
vllt musst du (Ord(char[1])-64) mit (Ord(char[i])-64) ersetzen

Khabarakh 21. Jan 2007 10:02

Re: Char To Numeric
 
Die Multiplikation mit der entsprechenden 26er-Potenz darfst du natürlich auch nicht vergessen.

xSkaschY 21. Jan 2007 10:11

- erledigt - Re: Char To Numeric
 
Zitat:

Zitat von dominikkv
vllt musst du (Ord(char[1])-64) mit (Ord(char[i])-64) ersetzen

ARGH! Danke, sehe schon den Wald vor lauter Bäumen nicht mehr. Sorry für den unsinnigen Thread.

EDIT:

Delphi-Quellcode:
function CharToNumeric(char: String): integer;
var numeric, faktor: integer;
    i: integer;
begin
  numeric := 0;
  for i := 1 to Length(char) do begin
    faktor := (i * 26) - 26;
    numeric := numeric + (Ord(char[i]) - 64) + faktor;
  end;
  Result := numeric;
end;

Gibt auch selbst bei AA -> 2 aus, sollte aber 27 sein. Warum!?

Hawkeye219 21. Jan 2007 11:11

Re: Char To Numeric
 
Hallo Tobias,

versuche es einmal mit folgendem Code:

Delphi-Quellcode:
function CharToNumeric(char: String): integer;
var numeric: integer;
    i: integer;
begin
  numeric := 0;
  for i := 1 to Length(char) do begin
    numeric := 26 * numeric + (Ord(char[i]) - 64);
  end;
  Result := numeric;
end;
Falls du den Code nicht nachvollziehen kannst, findest du vielleicht in der Wikipedia die nötigen Informationen zu Stellenwertsystemen.

Noch einige Hinweise: vermeide nach Möglichkeit die Neudefinition vordefinierter Bezeichner (hier: char), das stiftet nur Verwirrung. Die lokale Variable numeric benötigst du nicht, du kannst direkt mit dem Rückgabewert Result arbeiten. Weiterhin solltest du berücksichtigen, daß man deiner Funktion etwas anderes als Großbuchstaben übergeben kann.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz