Avatar billede velle Nybegynder
12. juni 2002 - 17:39 Der 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å.

VH Velle
Avatar billede hermandsen Juniormester
12. juni 2002 - 18:02 #1
Pos-funktionen... Kig efter mellemrum i strengen:

Pos(' ', S);

Finder et mellemrumstegn i streng S.
Avatar billede morten_s Nybegynder
12. juni 2002 - 19:58 #2
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;
Avatar billede morten_s Nybegynder
12. juni 2002 - 22:34 #3
Og med afbryde efter 15 ord

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;
Avatar billede hreiff Nybegynder
13. juni 2002 - 09:55 #4
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');
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester