Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: Austauschen einer Case Anweisung mit einer Sinnvolleren

  Alt 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)
  Mit Zitat antworten Zitat