Compter les groupes de 1 [Résolu]

Signaler
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour à tous

Alors voila un problème qui doit etre simple
à résoudre mais je fais compliqué

j'ai un string de 6 caractères 0 ou 1
il faut compter les groupes de 1
groupe plusieurs 1 ensemble

ex 110000 il y a 1 groupe de 1
001110 il y a 1 groupe de 1

110010 il y a 2 groupes de 1

le problème est le dernier caractère est lié au
premier
donc si j'ai 100001 il y a 1 groupe de 1
pareil pour 100011 il y a 1 groupe de 1
pareil pour 110001 il y a 1 groupe de 1

par contre 100101 il y a 2 groupes de 1

Merci

10 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Tiens, en vl'a une autre de "chose"
Transpose en VB.Net ce petit "machin" écrit en VB6
Private Sub CommandButton1_Click()
  toto = "100011"
  For i = Len(toto) To 2 Step -1
    toto = Replace(toto, String(i, "1"), "1")
  Next
  corr IIf(Left(toto, 1) & Right(toto, 1) "11", 1, 0)
  'orr = Val(Left(toto, 1)) + Val(Right(toto, 1)) Mod 11
  toto = Replace(toto, "0", "")
  nbgr1 = Len(toto) - corr
  MsgBox nbgr1
End Sub

et qui traite comme tu l'as précisé.
Si tu veux encore d'autres manières, on fait


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
334
Bonjour,

Quel est ton problème, montre nous ton code si tu veux, on te dira ce qui ne va pas.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
C'est bon j'ai écrit un truc

Dim group() As String
 Dim strcheck As String
 strcheck = "100011"
 group = strcheck.Split(CChar("1"))
 counterzero = 0
 If group.Length > 2 Then
    For Each l In group
        If l.Contains("0") Then
           counterzero += 1
        End If
     Next
  If counterzero > 1 Then
     Return False
  End If
End If


j'ai testé avec plusieurs ex
ça marche
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Juste pour amélioration :
CChar("1")
c'est pareil que
"1"c

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Le code n'est pas au point
j'essaye autre chose
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
ça doit aller

Dim group() As String
Dim strcheck As String
Dim counterzero As Integer
Dim counterun As Integer

strcheck = "010011"
group = strcheck.Split("1"c)
counterzero = 0
If group.Length > 2 Then
   For Each l In group
      If l.Contains("0") Then
         counterzero += 1
      End If
   Next
   If counterzero > 1 Then
      counterun = 0
      group = strcheck.Split("0"c)
      For Each l In group
        If l.Contains("1") Then
          counterun += 1
        End If
      Next
      If counterun > 1 Then
         Return False
      End If
    End If
End If
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
ucfoutu salut
les messages se sont croisé
je teste
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modif à apporter (pour le cas où il n'y aurait que des 1
toto = "111010"
  corr IIf((Left(toto, 1) & Right(toto, 1) "11" And InStr(toto, "0")), 1, 0)
  For i = Len(toto) To 2 Step -1
    toto = Replace(toto, String(i, "1"), "1")
  Next
  toto = Replace(toto, "0", "")
  nbgr1 = Len(toto) - corr
  MsgBox nbgr1


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
voila en net
Private Sub test()
    Dim toto As String
    Dim corr As Integer
    Dim nbgr1 As Integer
    toto = "101101"
    For i = Len(toto) To 2 Step -1
       toto = toto.Replace(New String("1"c, i), "1")
 Next
 corr CInt(IIf(Microsoft.VisualBasic.Left(toto, 1) & Microsoft.VisualBasic.Right(toto, 1) "11", 1, 0))
toto = toto.Replace("0", "")
nbgr1 = toto.Length - corr

    End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
une autre manière assez rigolote sous VB6
 toto = "101010"
  titi = Split(StrConv(toto, vbUnicode), Chr(0))
  corr IIf(titi(0) & titi(UBound(titi) - 1) "11", 1, 0)
  For i = 1 To UBound(titi) - 1
    If titi(i - 1) "1" Then titi(i) "0"
  Next
  MsgBox Len(Replace(Join(titi, "0"), "0", "")) - corr

à transposer en VB.net

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP