Cómo agrupar números consecutivos en una cadena en vb
En primer lugar, hasta donde yo sé, sus datos originales ya deberían estar ordenados de pequeño a ¿grande?
Paso 1: Ha dividido los datos usando la función Split() y los ha almacenado en la matriz c.
Paso 2:
Por supuesto, use un bucle para escanear la matriz de principio a fin y guárdela en una nueva matriz una por una. La clave de este problema es lo que tiene. Dificultad descrita anteriormente:
Mi enfoque es escanear la matriz c primero para encontrar el tamaño máximo requerido en la matriz bidimensional (porque no se conocen los valores de ambas dimensiones), de modo que El programa puede ser flexible. Adaptarse a la situación sin desperdiciar espacio. Primero obtenga el valor de la primera dimensión y el valor de la segunda dimensión de la matriz. Teniendo en cuenta que el valor de la segunda dimensión puede ser diferente, utilice el valor máximo.
Por ejemplo: En el caso que enumeraste, necesitas una matriz bidimensional de 3 * 3, pero también es posible que los datos sean así: "1 2 3 4 5 67 8 9 10"
El código es el siguiente:
Opción explícita
Subcomando privado1_ Click()
Atenuar una cadena As
Atenuar c p>
Atenuar n como entero
Atenuar i como entero
Atenuar j como entero
Atenuar K como número entero de matrices
Dim L As Integer
Dim MyMax As Integer 'El tamaño de cada matriz
Dim SJ As String
Dim d() As String p>
a = "3 4 5 8 9 10 14 15 16"
c = Dividir(a. "")
c = Dividir(a. "") "")
p>n = UBound(c) 'Obtener el subíndice máximo de la matriz c
'Primero averigüe cuántas matrices se necesitan y el tamaño de cada matriz p>
K = 1
L = 1
SJ = c(0)
MyMax = 0
Para i = 1 a n
Si CInt(c(i)) <>CInt(c(i - 1)) + 1 entonces
Si L >Entonces MyMax = L
K = K + 1
L = 0
Finalizar si
L = L + 1
Siguiente i
ReDim d(K, MyMax) como cadena
'Start
K = 1
L = 1
SJ = c( 0)
d(K, L) = SJ
Para i = 1 To n
Si CInt(c( i)) = CInt(SJ) + 1 Entonces
L = L + 1
SJ = c(i)
d(K, L) = SJ
De lo contrario
SJ = c(i)
K = K + 1
L = 1
d(K, L) = SJ
Finalizar si
Siguiente i
'Salida
Para i = 1 a K
Para j = 1 a UBound(d, 2)
Imprimir d(i, j);" ";
Siguiente j
Imprimir
Siguiente i
End Sub
.p>
El código ha sido probado y aprobado, puede copiarlo y usarlo directamente.
Nota: En tus datos "3 4 5 8 9 10 14 15 16", se debe eliminar el espacio antes del 3; de lo contrario, el código se modificará correctamente.