![]() |
inttostr & strtoint selber schreiben.
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:
Integer in String umwandeln
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;
Delphi-Quellcode:
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?!
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; gruß Evi EDIT: Entsprechend des Vorschlags von Pacman1986 angepasst. |
Re: inttostr & strtoint selber schreiben.
|
Re: inttostr & strtoint selber schreiben.
mein Vorschlag wäre du brauchst erg nicht ^^
|
Re: inttostr & strtoint selber schreiben.
Zitat:
...:cat:... 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? |
Re: inttostr & strtoint selber schreiben.
Zitat:
Format werd ich mir mal genauer anschauen, danke für den Tip! Zitat:
|
Re: inttostr & strtoint selber schreiben.
Zitat:
|
Re: inttostr & strtoint selber schreiben.
Zitat:
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; |
Re: inttostr & strtoint selber schreiben.
Zitat:
|
Re: inttostr & strtoint selber schreiben.
Hi,
was passiert wenn s2i mit z.B. 34-Ag-3 aufgerufen wird? Eine minimale Optimierung erreichst du, wenn du str als Const übergibst:
Delphi-Quellcode:
function s2i(CONST str: String):Integer;
Viele Grüße, pszopp |
Re: inttostr & strtoint selber schreiben.
hallo evian
wie wäre diese version von s2i
Delphi-Quellcode:
setzt voraus, das s ein korrekter dezimalstring ist.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz