Fonction qui calcule le nombre de mots dont le nombre de lettres est strictement

Signaler
Messages postés
5
Date d'inscription
dimanche 23 novembre 2008
Statut
Membre
Dernière intervention
25 février 2009
-
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
-
<dir>



Bonjour a tous,

Tous ceux qui pourront m'aider seront les bienvenue...
J'aimerai coder une fonction qui calcule le nombre de mots (integer) dont le nombre de lettres (char) est strictement superieur a 3 dans une phrase (string) mais je n'y parviens pas...

Par exemple, cette fonction appelée avec la phrase suivante :   'J'ai posté un message sur un forum aujourdui'
renvoit  4 car les seuls mots dont le nombre de lettres excedent 3 sont :  'posté' 'message', 'forum' et 'aujourdui'.
  Merci d'avance a tous ceux qui pourront m'aider !




</dir>

4 réponses

Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Salut, peux tu nous montrer tout de même ce dont tu es parvenu à faire ?
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Salut,

Ouh lalala! C'est un truc à tourner bourrique, ça!
A cause des apostrophes...




'J'ai posté un message sur un forum aujourd'hui'




Si une apostrophe = un espace, alors il y aura « aujourd » et pas « hui » dans ta liste.
Si une apostrophe <> un espace, alors il y aura « j'ai » et « aujourd'hui » dans ta liste.
Messages postés
5
Date d'inscription
dimanche 23 novembre 2008
Statut
Membre
Dernière intervention
25 février 2009

resalut a tous!
Finalement g trouve la solution mais cela n'a pas été sans difficulte....le probleme est qu'elle ne gere pas les mots composés comme 'Jean Paul',etc...c assez problematique mais bon si vous avez des idées a me proposer pour resoudre ce probleme merci d'avance...En attendant, pour tous ceux qui en auraient un jour besoin je vous poste la fonction en question :

function nb_mots_sup3(str: string): integer;
var
  i, j, l, nbOcc, nbWord : integer;


begin
   i := 1;
   nbWord := 0;
   l := length(str);
   while i <= l do
   begin


       while (i <l) and (str[i] ' ')   do
         i := i + 1;


       nbOcc := 0;
       while  (i <= l) and (str[i] <> ' ')  do
       begin
          nbOcc := nbOcc + 1;
          i := i + 1;
       end;
       if nbOcc > 3 then
          nbWord :=  nbWord + 1;




   end;
   result := nbWord;
end;
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Je te propose un poil plus simple :

function Combien(const Str: string): Integer;
var TsTemp: TStringList;
    X: Integer;
begin
  Result:= 0;
  TsTemp:= TStringList.Create;
  try
    TsTemp.DelimitedText:= Str;
    for X:= TsTemp.Count-1 downto 0 do
    if Length(TsTemp[X])<4 then
      TsTemp.Delete(X);
    Result:= TsTemp.Count;
  finally
    TsTemp.Free;
  end;
end;

Pose un bouton et sa procedure est:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(Combien('J''ai posté un message sur un forum aujourdui')));
// ou Showmessage(IntToStr(Edit1.Text)); avec un TEdit par exemple
end;

A bientot