2009-03-03 8 views
1

/edit: merci pour l'aide jusqu'à présent, mais je n'ai aucune des solutions pour prendre l'entrée d'échantillon et donner la sortie de l'échantillon. Ma description n'est pas la plus claire, désolé.C Tableaux et listes ininterrompues

J'ai un tableau composé de données binaires. Ce que je veux faire est de déterminer combien de temps chaque segment ininterrompu de 1 ou 0 est.

Dire que j'ai ces données:

0111010001110 

Dans un tableau binaryArray que je dois traduire par:

0100110 

stockées dans nwArray0 représente un étroit (moins de 3 chiffres) et 1 représente une largeur (> 3 chiffres). Je ne suis pas concerné par la valeur binaire mais par la longueur de chaque composant. Je ne suis pas sûr que cette explication ait du sens.

C'est ce que j'ai; ça ne marche pas, je peux voir pourquoi, mais je ne peux pas penser à une bonne solution.

for(x=0;x<1000;x++){ 
    if(binaryArray[x]==binaryArray[x+1]){ 
     count++; 
     if(count>=3){ 
      nwArray[y]=1; 
      y++; 
      count=0; 
     } 
    }else{ 
     if(barcodeArray[x]){ 
      nwArray[y]=0; 
     } 
    } 
} 
+0

Votre exemple de sortie (0100110) dit que le nombre> = 3, mais votre code et le texte dit (compte> 3). – jfs

+0

Ouais, c'est confus, mal laisser l'affiche originale trier exactement ce qu'il veut. –

+0

Oui, ça devrait être> = 3. Je l'ai modifié pour un exemple plus simple mais j'ai oublié de faire ce changement. Merci! – blork

Répondre

5

Est-ce que c'est le cas?

int count = 0; 
for (x=0; x<1000;x++) 
{ 
    if (binaryArray[x] != binaryArray[x+1]) 
    { 
     if (count < 3) 
      nwArray[y]=0; 
     else 
      nwArray[y]=1; 

     y++; 
     count = 0; 
    } 
    else 
     count++; 
} 
+0

Vous avez oublié d'écrire le dernier élément (par exemple, dans le cas où binaryArray [998] == binaryArray [999]), mais à part cela, cela semble correct. –

+0

Peut-être mieux de le réécrire comme [x-1] ... [x] de toute façon. Merci – MikeW

+0

pas de problème. Je l'ai juste vu parce que c'est l'une des erreurs typiques que j'écris (en oubliant le dernier cas-coin) :-) –

3

Un problème que vous avez est que vous comparez compter avec 3 trop tôt. Attendez jusqu'à ce que vous voyiez un changement dans le flux binaire. Essayez une boucle while jusqu'à ce que le bit retourne, puis comparez le nombre.

0

Modified @MikeW's answer:

int count = 0; 
int nwSize = 0;  
const int ilast = SIZEOF(binaryArray) - 1; 
for (int i = 0; i <= ilast; ++i) 
    if (i == ilast || binaryArray[i] != binaryArray[i+1]) { 
    nwArray[nwSize++] = (count > 1); /* true for '1110'; false for '110' */ 
    count = 0; 
    } 
    else 
    ++count; 
assert(count == 0);