Compter les groupes de 1

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 3 août 2011 à 12:26
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 3 août 2011 à 21:52
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 août 2011 à 16:19
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
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 août 2011 à 13:02
Bonjour,

Quel est ton problème, montre nous ton code si tu veux, on te dira ce qui ne va pas.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 août 2011 à 14:54
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 août 2011 à 15:09
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
0

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

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 août 2011 à 16:06
Le code n'est pas au point
j'essaye autre chose
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 août 2011 à 16:30
ç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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 août 2011 à 16:33
ucfoutu salut
les messages se sont croisé
je teste
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 août 2011 à 17:33
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 août 2011 à 17:49
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 août 2011 à 21:52
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
0
Rejoignez-nous