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
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
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;
Dzięki. Tego szukałem ;)
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.
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.