znajdowanie w zdaniu znaków spacji

0

Witam
Piszę program który po wpisaniu zdania rozbija je na wyrazy i każdy umieszcza w tablicy. Jako "separator" wyrazów mam spację.

p:=Pos(' ',zdanie);

Tylko nie działa to dla np. dwóch, trzech spacji. Co zrobić aby działało?
Pozdrawiam

0

Bo w prawidłowych zdaniach separatorem będzie jedna spacja. Najprościej to będzie zamienić wiele spacji w ciągu na jedną. W Dephi jak i FPC oraz za pewne w Lazarusie, masz w module SysUtils funkcję StringReplace. Nie określiłeś środowiska, ale w google da się też znaleźć kod samej funkcji jak i różne do niej podobne zamieniające wyrazy lub więcej niż jeden znak. Możesz też z nich skorzystać jeżeli piszesz na przykład w WinAPI i nie chcesz używać dodatkowych modułów. Przykład takiej funkcji, ktorej kiedyś użyłem jeszcze w Delphi 3, pod FPĆ zadziała po dodaniu {$MODE DELPHI}.

function StrReplaceStr(Const Tgt, OldStr, NewStr: string): string;

function InStr(Start: integer; const BigStr, SmallStr: string): integer;
var
  L9, L8, Max, P: integer;
  BigL, SmallL: integer;
  C : Char;
begin
  Result := 0;
  if Start <= 0 then
    Start := 1;
  BigL := Length(BigStr);
  SmallL := Length(SmallStr);
  if BigL = 0 then
    Exit;
  if SmallL = 0 then
  begin
    Result := Start;
    Exit;
  end;
  Max := BigL - SmallL + 1;
  if Max < Start then
    Exit;
  C := SmallStr[1];
  for L9 := Start To Max do
    if BigStr[L9] = C then
    begin
      P := L9 + SmallL - 1;
      for L8 := SmallL downto 2 do
      begin
        if BigStr[P] <> SmallStr[L8] then
          Break;
        P := P - 1;
      end;
      if P = L9 then
      begin
        Result := L9;
        Break;
      end;
    end;
  end;

var
  Q, L : integer;
  S : string;
begin
  if OldStr = '' then
  begin
    Result := Tgt;
    Exit;
  end;
  L := Length(OldStr);
  S := Tgt;
  Q := 1;
  Q := Instr(Q, S, OldStr);
  while Q > 0 do
  begin
    S := Copy(S, 1, Q-1) + NewStr + Copy(S, Q + L, MaxInt);
    Q := Q + Length(NewStr);
    Q := Instr(Q, S, OldStr);
  end;
  Result := S;
end;
0

Dzięki. Tego szukałem ;)

1
const
   s:string=' ala ma   kota  a kot    ma ale   ';

begin
	while copy(s,length(s),1) = #32 do
		dec(s[0]);
 	while pos(#32,s)>0 do begin
		while copy(s,1,1)=#32 do
			delete(s,1,1);
		writeln('[',copy(s,1,pos(#32,s)-1),']');
		delete(s,1,pos(#32,s));
	end;
	if s<>'' then
		writeln('<',s,'>');
end. 
0
Xitami napisał(a)
const
  s:string=' ala ma   kota  a kot    ma ale   ';
...
  dec(s[0]);
...

W Delphi, Dec(s[0]) przejdzie jedynie dla typu s:ShortString. Bezpieczniej byłoby Delete(s,Length(s),1).
No i oczywiście s musi być var a nie const.

1 użytkowników online, w tym zalogowanych: 0, gości: 1