07. februar 2004 - 16:04Der er
6 kommentarer og 1 løsning
tæl tegn i memo1
min kode er som følger:
const genstandtael: set of Char = ['|']; var I: Integer; genstande: Integer; begin genstande := 0; for I := 1 to Length(Memo1) do begin if UpperCase(Memo1)[I] in genstandtael then begin genstande := genstande + 1; end; end; ShowMessage(IntToStr(genstande));
problemet er at den ikke kan "finde" Memo1... den ved simpelthen ikke hvad Memo1 indeholder, altså udskriver den 0 også selvom jeg har sat Memo1 til at indeholde 3 |'er
var Count : integer; st : string; begin Count := 0; st := Memo1.Text; // Might add UpperCase() for i := 1 to length(st) do if st[i] = '|' then inc(Count); // More hack'ish: inc(Count,integer(st[i] = '|')); result := Count + 3; end;
I dit eksempel bruger du length forkert. Den korrekte måde er length(Memo1.Text). Dernæst kalder du UpperCase ligeså mange gange som teksten er lang - det er ineffektivt. Desuden søger du efter '|', så det er unødvendigt. Sidst så har du opdaget set's - og det er også fint nok - bare ikke her.
Gu er min kode ikke fuld af fejl! Det eneste der manglede var en variabel ved navn 'i' (har testet det).
function TForm1.CountDelimiters : integer; var i, Count : integer; st : string; begin Count := 0; st := Memo1.Text; // Might add UpperCase() for i := 1 to length(st) do if st[i] = '|' then inc(Count); result := Count + 3; end;
eller nørdens variant:
function TForm1.CountDelimiters : integer; var i, Count : integer; st : string; begin Count := 0; st := Memo1.Text; // Might add UpperCase() for i := 1 to length(st) do inc(Count,integer(st[i] = '|')); result := Count + 3; end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.