12. juni 2002 - 17:39Der er
3 kommentarer og 1 løsning
Splitte streng op i ord
Jeg har en streng f.eks. 'Hunden graver et dybt hul'
Den skal deles op efter ordene og de skal puttes ind i en Array[1..15] of MinStreng (MinStreng = String[20]). Sådan at:
Array[1] får 'Hunden' Array[2] får 'graver' OSV
Samtidigt skal den tælle sammen hvor mange ord der i alt var.
Der er en ting mere, der skal tages højde for. Den skal afbryde med en fejlbesked hvis et af ordene er større end 20 tegn. Desuden skal den også afbryde hvis der er mere end 15 ord.
Hvordan gøres det lettest?
Jeg har fundet en måde at gøre det på, men det er meget kluntet og kan helt sikkert gøres bedre, evt. med diverse indbyggede funktioner som jeg ikke kender til. Så jeg håbede på at en af jer hårde Delphi-Scwiin har en genial måde at gøre det på.
procedure TForm1.Button1Click(Sender: TObject); var InStr, OrdStr : String; MinArray : Array[1..15] of String; i : Integer; begin i := 1; InStr :='Hunden graver et dybt hul'; while (InStr <> '') and (pos(' ', InStr) > 0) do begin OrdStr := copy(InStr, 1, pos(' ', InStr)-1); Delete(InStr, 1, Pos(' ', InStr)); if length(OrdStr) <= 20 then MinArray[i] := OrdStr else ShowMessage(OrdStr+' Er længere end 20 karaktere'); inc(i); end; if length(OrdStr) <= 20 then MinArray[i] := InStr else ShowMessage(OrdStr+' Er længere end 20 karaktere'); ShowMessage('Der var: '+IntToStr(i)+' ord i strengen'); end;
procedure TForm1.Button1Click(Sender: TObject); var InStr, OrdStr : String; MinArray : Array[1..15] of String; i : Integer; begin i := 1; InStr :='Hunden graver et dybt hul'; while (InStr <> '') and (pos(' ', InStr) > 0) do begin OrdStr := copy(InStr, 1, pos(' ', InStr)-1); Delete(InStr, 1, Pos(' ', InStr)); if length(OrdStr) <= 20 then MinArray[i] := OrdStr else ShowMessage(OrdStr+' Er længere end 20 karaktere'); inc(i); if i = 16 then Exit; end; if length(OrdStr) <= 20 then MinArray[i] := InStr else ShowMessage(OrdStr+' Er længere end 20 karaktere'); ShowMessage('Der var: '+IntToStr(i)+' ord i strengen'); end;
Hvis du bruger delphi 6 er der en funktion der hedder delimitedText
var L : TStringList; begin L := TStringList.Create; L.Delimiter := ' '; (*space*) L.DelimitedText := Edit1.Text; (*L.Text := Edit1.Text;*) ShowMessage(L[0]+' ' +L[1]); end;
Du kan finde antallet af ord direkte på L.count, men du må selv kontrollere længden
PS jeg ved godt at der ikke bruges arrays med fast længde, men funktionen er nem og god.
if L.count >=15 then showmessage('for mange ord'); lang := false; for i := 1 to L.count-1 do if length(L.strings[i])>=20 then lang := true; if lang then showmessage('For langt ord');
Synes godt om
Ny brugerNybegynder
Din løsning...
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.