Nombre de mots dans une phrase et mot le plus long

Signaler
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004
-
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
-
Voila je voudrais savoir comment faire un programme qui saisisse une phrase et affiche :
-le nombre de mots dans cette phrase.
-Le mot le plus long et le nombre de carctère qui le compose.

Merci d'avance pour votre aide.

11 réponses

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Salut
Pour le nombre de mots :
dim t() as string
t=split(TaPhrase," ")
nbMots = ubound(t)-lbound(t)+1

peut être avant faut-il supprimer les ponctuations, dans ce cas :
TaPhrase = replace(TaPhrase, ","," ") etc...

Pour le mot le plus long :
explorer t() ligne par ligne.

Cordialement, CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Un tit exemple :

Dim Phrase As String
Dim Temp As String
Dim MotPlusLong As String
Dim t() As String
Dim i As Integer
Dim l As Integer

Phrase = "CodesSources, le rendez-vous des dresseurs de puces."

' on élimine les "," et "."
Temp = Replace(Phrase, ",", "")
Temp = Replace(Temp, ".", "")

' on crée le tableau des mots
t = Split(Temp, " ")

l = 0
For i = LBound(t) To UBound(t)
If Len(t(i)) > l Then
l = Len(t(i))
MotPlusLong = t(i)
End If
Next

MsgBox "Nb de mots = " & UBound(t) - LBound(t) + 1 & Chr$(13) & _
       "Mot le plus long : " & MotPlusLong & Chr$(13) & _
       "Nb de caractères : " & l
      


Cordialement, CanisLupus
Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

salut,
je ne comprend pourquoi la soustraction, lbound = 0 sur un split
---> UBound(t) - LBound(t) + 1

Bonne prog, poele_a_frire@hotmail.com
liquide
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
DSL liquide, c une vieille habitude chez moi dans le traitement des tableaux à cause des Option Base et autre dim t(x to y).
Sur un split, tu as raison, il suffit de de ubound(t)+1 à la place de UBound(t) - LBound(t) + 1. Mais bon, comme ça, je ne peux pas me tromper. Des fois que j'ai une fonction à laquelle je passe un tableau qui peut être issu d'un split ou non.

Cordialement, CanisLupus
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004

Excellent merci beaucoup c vraiment sympa de votre part de m'aidé merci beaucoup.
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004

J'ai encore une ptite question c possible de réaliser ce programme sans utiliser les fonctions Lbount Ubount et Split c'est a dire sans faire de tableau.

Merci d'avance les gars.
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Oui, c possible mais tu vas galérer un max car dans ce cas il faut analyser la chaine de caractères à coup de mid$. J'ai pas d'exemple sous la main mais ça peut se faire. Et en plus, ça doit être +long. Si j'ai un moment je jette un oeil dessus.

Cordialement, CanisLupus
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004

Ok merci beaucoup tu m'as deja bien aidé je ten remercie !!!
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Voilà un exemple sans tableau qui donne apparemment le même résultat que dans mon précédent exemple :

Dim Phrase As String
Dim Temp As String
Dim MotPlusLong As String
Dim MotPlusLong_Temp As String
Dim i As Integer
Dim l As Integer, l_temp As Integer
Dim nbMots As Integer

Phrase = "CodesSources, le rendez-vous des dresseurs de puces."

' élimination des "," et "."
Temp = Replace(Phrase, ",", "")
Temp = Replace(Temp, ".", "")

' Analyse de la phrase car par car
For i = 1 To Len(Temp)
Select Case Asc(LCase(Mid$(Temp, i, 1))) ' calcul de la valeur des caractères transformés en minuscules
Case 97 To 122 ' pour les car de a à z
l_temp = l_temp + 1
MotPlusLong_Temp = MotPlusLong_Temp & Mid$(Temp, i, 1)
Case ElseIf l_temp > l Then l l_temp: MotPlusLong MotPlusLong_Temp
l_temp = 0
MotPlusLong_Temp = ""
nbMots = nbMots + 1
End Select
Next

' affichage des résultats
MsgBox "Nb de mots = " & nbMots & Chr$(13) & _
"Mot le plus long : " & MotPlusLong & Chr$(13) & _
"Nb de caractères : " & Len(MotPlusLong)


Cordialement, CanisLupus
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004

Merci bcp ca marche nickel mais je pense que l'on n'ait pas obligé d'utiliser le temp enfin bon du moment que ça marche c super !!!
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Exact pour le Temp mais ça aussi, comme le lbound, c une vieille habitude. Ca permet de conserver le contenu de la variable d'origine, au cas où. Mais c'est vrai que tu peux travailler directement sur la variable Phrase.

Cordialement, CanisLupus