Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo agrupar números consecutivos en una cadena en vb

Cómo agrupar números consecutivos en una cadena en vb

Esta es una pregunta tediosa, la dificultad es usar una matriz dinámica 2D y no saber el tamaño de la matriz;

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

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

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

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.