Nombre de mots dans une phrase et mot le plus long

SUBMAIN
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004
- 1 nov. 2004 à 11:50
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
- 3 nov. 2004 à 20:19
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

cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
1 nov. 2004 à 12:01
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
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
1 nov. 2004 à 12:18
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
0
cs_liquide
Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

1 nov. 2004 à 13:54
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
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
1 nov. 2004 à 15:21
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SUBMAIN
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004

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

2 nov. 2004 à 14:32
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.
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
2 nov. 2004 à 20:10
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
0
SUBMAIN
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004

2 nov. 2004 à 20:16
Ok merci beaucoup tu m'as deja bien aidé je ten remercie !!!
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
2 nov. 2004 à 21:00
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
0
SUBMAIN
Messages postés
9
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2004

3 nov. 2004 à 12:23
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 !!!
0
cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
18
3 nov. 2004 à 20:19
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
0