Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
Delphi 12 Athens
|
AW: Austauschen einer Case Anweisung mit einer Sinnvolleren
26. Mai 2021, 20:10
Ähhh nein?
Das ist ein VAR-Parameter, da geht keine Funktion drumrum, schon garkeine mit String, wo es aber ein Char sein soll.
Delphi-Quellcode:
menueEingabe := UpperCase(menueEingabe)[1];
// oder direkt
case UpperCase(menueEingabe)[1] of
Aber hier sehe ich eh keinen Grund das Zwanghaft kürzen zu wollen.
Zitat:
Delphi-Quellcode:
' C',' c' : begin
laufVariable := length(satz);
while laufvariable > 0 do
begin
case satz[laufVariable] of
' +' : begin
delete(satz,laufVariable, 1);
insert(plus,satz,laufVariable);
end;
' -' : begin
delete(satz,laufVariable,1);
insert(minus,satz,laufVariable);
end;
' *' : begin
delete(satz,laufVariable,1);
insert(mal,satz,laufVariable);
end;
' /' : begin
delete(satz,laufVariable,1);
insert(geteilt,satz,laufVariable);
end;
end; // End case
dec(laufvariable);
end;
writeln(satz);
end;
So, wem fällt auf, dass es praktisch alle 4 Fälle identisch sind, mit Ausname des Insert-Text,
Und warum überhaupt unnötig ein WHILE, anstatt einem FOR?
Delphi-Quellcode:
for laufVariable := Length(satz) downto 1 do
if satz[laufVariable] in ['+', '-', '*', '/'] then
begin
delete(satz, laufVariable, 1);
case satz[laufVariable] of
'+' : insert(plus, satz, laufVariable);
'-' : insert(minus, satz, laufVariable);
'*' : insert(mal, satz, laufVariable);
'/' : insert(geteilt, satz, laufVariable);
end;
end;
Delphi-Quellcode:
const ZeichenZuText: array['*'..'/'] of string = (mal, plus, '', minus, '', geteilt);
for laufVariable := Length(satz) downto 1 do
if satz[laufVariable] in ['+', '-', '*', '/'] then
begin
delete(satz, laufVariable, 1);
insert(ZeichenZuText[satz[laufVariable]], satz, laufVariable);
end;
Und nun mal ganz im Ernst ...
Delphi-Quellcode:
satz := ReplaceStr('+', plus);
satz := ReplaceStr('-', minus);
satz := ReplaceStr('*', mal);
satz := ReplaceStr('/', geteilt);
// oder
for C := Low(ZeichenZuText) to High(ZeichenZuText) do
if ZeichenZuText[C] <> '' then
satz := ReplaceStr(C, ZeichenZuText[C]);
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
Geändert von himitsu (26. Mai 2021 um 20:19 Uhr)
|