AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

inttostr & strtoint selber schreiben.

Ein Thema von Evian · begonnen am 1. Jun 2006 · letzter Beitrag vom 1. Jun 2006
Antwort Antwort
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#1

inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 11:07
Hallöchen,

ich sitze hier gerade im Unterricht und wir haben die Aufgabe bekommen 2 Funktionen zum umwandeln von Integerwerten in Stringwerte und umgekehrt zu schreiben. Dabei sollen wir auf die Standardfunktionen inttostr und strtoint möglichst verzichten. Gut, der Anspruch ist hier nicht besonders hoch und der Lehrer wird warscheinlich wieder von jeder Lösung begeistert sein, aber ich habe mir mal kurz was zusammen gekritzelt:

String in Integer umwandeln:
Delphi-Quellcode:
function s2i(str: String):Integer;
VAR
i,x : INTEGER;
BEGIN
  result := 0;
  x := 1;
  for i := length(str) downto 1 DO
  BEGIN
    result := result + ((ord(str[i])- 48)*x);
    x := x * 10;
  END;
END;
Integer in String umwandeln
Delphi-Quellcode:
function i2s(int: Integer):String;
BEGIN
  result := '';
  while (int <> 0)DO
  BEGIN
    result := chr((int mod 10)+48)+result;
    int := int DIV 10;
  END;
END;
Ich hab dar zwar keine Fehlerbehandlung drinne, aber es funktioniert soweit. Trotzdem gehe ich aber davon aus, dass der Code nicht besonders effizient ist... hat wer von euch noch eine andere Idee?!

gruß

Evi

EDIT: Entsprechend des Vorschlags von Pacman1986 angepasst.
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 11:12
Also: Fuer StrToInt gibts das schoene Delphi-Referenz durchsuchenval, auf das StrToInt am End auch zurueckgreift.
Und fuer IntToStr kannst du ja Delphi-Referenz durchsuchenFormat verwenden *g*

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
pacman1986

Registriert seit: 11. Feb 2005
Ort: Kirchhain
498 Beiträge
 
Delphi 2005 Personal
 
#3

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 11:12
mein Vorschlag wäre du brauchst erg nicht ^^
Christian N.
Designed to make a difference

najjaronline.de
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 11:17
Zitat von pacman1986:
mein Vorschlag wäre du brauchst erg nicht ^^
Gerade das ist sauber, da man so das AX-Register für andere Aufgaben freihält. Das Ergebnis der Funktion wird über EAX zurückgegeben. In dem Moment, in welchem Du Result nutzt, ist es blockiert.

......

P.S.1: In reinem Pascal (ohne ASM) wirst Du StrToInt auch nicht entscheidend effektiver gestalten können.
P.S.2: Was ist mit negativen Zahlen?
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#5

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 11:19
Zitat von JasonDX:
Also: Fuer StrToInt gibts das schoene Delphi-Referenz durchsuchenval, auf das StrToInt am End auch zurueckgreift.
Und fuer IntToStr kannst du ja Delphi-Referenz durchsuchenFormat verwenden *g*

greetz
Mike
Stimmt val kenn ich ja noch aus den alten Turbo Pascal Zeiten...
Format werd ich mir mal genauer anschauen, danke für den Tip!

Zitat von Pacman1986:
mein Vorschlag wäre du brauchst erg nicht ^^
´Ja Du hast Recht, ich könnte auch gleich mit Result arbeiten, wenn ich es entsprechend initialisiere.
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 11:24
Zitat von sakura:
Gerade das ist sauber, da man so das AX-Register für andere Aufgaben freihält. Das Ergebnis der Funktion wird über EAX zurückgegeben. In dem Moment, in welchem Du Result nutzt, ist es blockiert.
Das will ich nicht hoffen! Der Compiler kann Result so lange wie eine normale lokale Variable behandel bis die Funktion/Prozedur verlassen wird. Ich kann's gerade nicht überprüfen, aber schließlich kann man ja auch Funktionen aufrufen nachdem man etwas an Result zugewiesen hat - und dabei würde der Inhalt von EAX zerstört werden (und ich habe noch keinen disassemblierten Delphi-Code gesehen, bei dem immer ein push eax/pop eax um Funktionsaufrufe herum steht).
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#7

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 11:29
Zitat von sakura:
P.S.2: Was ist mit negativen Zahlen?
...ups!!!

Edit: ok hier mit vorzeichen:

Delphi-Quellcode:
function s2i(str: String):Integer;
VAR
i,x : INTEGER;
BEGIN
  result := 0;
  x := 1;
  for i := length(str) downto 1 DO
  BEGIN
    if str[i] = '-then
    result := result * -1 else
    BEGIN
      result := result + ((ord(str[i])- 48)*x);
      x := x * 10;
    END;
  END;
END;

function i2s(int: Integer):String;
VAR
vorz : char;
BEGIN
  result := '';
  vorz := chr(32);
  if int < 0 THEN
  BEGIN
    int := int * -1;
    vorz := '-';
  END;
  while (int <> 0)DO
  BEGIN
    result := chr((int mod 10)+48)+result;
    int := int DIV 10;
  END;
  result := vorz + result;
END;
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 11:51
Zitat von Flocke:
und ich habe noch keinen disassemblierten Delphi-Code gesehen, bei dem immer ein push eax/pop eax um Funktionsaufrufe herum steht
Und wenn man eine lokale String Variable hat oder einen String-Parameter ohne var/const/out, dann wird für Result sowieso auf den Stack Platz geschafft, weil der Compiler ein try/finally um die Funktion aufbaut. Da kann die Zuweisung an Result auch direkt vor dem "end" stehen. Das finally kommt trotzdem danach.
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#9

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 12:20
Hi,

was passiert wenn s2i mit z.B. 34-Ag-3 aufgerufen wird?

Eine minimale Optimierung erreichst du, wenn du str als Const übergibst:
function s2i(CONST str: String):Integer;
Viele Grüße,
pszopp
www.pstipp.de | Tippseite zur Formel 1 und Fußball WM/EM - kostenlos und Just-For-Fun
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#10

Re: inttostr & strtoint selber schreiben.

  Alt 1. Jun 2006, 23:29
hallo evian

wie wäre diese version von s2i

Delphi-Quellcode:
FUNCTION S2I(const s:string):integer;
var i:integer; neg:boolean;
begin
   result:=0;
   if Length(s)=0 then exit;
   neg:=s[1]='-';
   for i:=Integer(neg)+1 to Length(s) do result:=result*10+Ord(s[i])-48;
   if neg then result:=-result;
end;
setzt voraus, das s ein korrekter dezimalstring ist.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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