1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
program aaa;
uses wincrt; (* euh, oui j'utilise TPW :p *)
var
i,j,c, (*compteurs*)
l, (*longuer de notre chaine*)
nb, (* nb d'esapces*)
nbm, (*nb de mots =nb d'espace +1*)
p, (*pos du 1er espace*)
x (*longuer du 1er mot *) : integer;
ch,espace,res,m : string;
esp: boolean ; (*s'il existent deux espaces qui se suivent ou non *)
begin
write('entrer votre chaine') ;
read(ch);
l:=length(ch);
for j:= 1 to l do
if (ch[j]=' ') and (ch[j-1]=' ') then
delete(ch,j,1);
(* autre possiblité, qui ne fonctionne pas non plus apparemment:
j:=0;esp:=false;
repeat
j:=j+1;
if (ch[j]=espace) and (ch[j-1]=espace) then
begin esp:=true;
delete(ch,j,1);
end;
until (esp=false) or (j=l) ; *)
if ch[1]=' ' then delete(ch,1,1);
if ch[l]=' ' then delete(ch,l,1) ;
i:=0; nb:=0;
repeat
i:=i+1;
if ch[i]=' ' then nb:=nb+1;
until (i=length(ch)-1);
writeln(nb,'espaces'); (* juste pour voir :p *)
nbm:=nb+1;
writeln(nbm, 'mots');
res:=''; (*chaine vide qui contiendra la nvlle chaine inversée *)
for c:=1 to nbm do
espace:=' ';
p:=pos(espace,ch); (* position du 1er espace, précédé donc du 1er mot*)
m:=copy(ch,1,p); (* exrait le 1er mot dans 'm' *)
x:=length(m);
delete(ch,1,x); (* supprime le 1er mot*)
res:=m+res;
writeln('chaine inversée',res)
end. |
Partager