Concatenar char de un arreglo en C

publicado por: Anonymous

Tengo un puntero char con números, que sería:
puntero = [1,2,4,5,n,2,3,n,5,2,1];

¿Cómo puedo hacer que sea lo siguiente?:

nuevo = [1245,n,23,n,521];, n es un salto de linea, es solo para representarlo.

He probado hacer un ciclo con strcat y strtol, pero no da resultados.

solución

No has puesto código así que voy a hacer suposiciones.

Cuando dices que tienes un arreglo de Char con números entiendo que tienes esto:

char numeros[] ={'1','2','4','5','n','2','3','n','5','2','1'};

Y que lo que quieres conseguir es esto:

char **resultado = {"12345","23","521"};

En el primer caso tienes caracteres sueltos. Cada carácter es individual y no está relacionado con ningún otro. Sin embargo, en el segundo caso tienes tres cadenas de caracteres.

Si has estudiado cadenas de caracteres sabrás que las cadenas han de finalizar con un carácter nulo.

Aplicando esto puedes resolver el problema en tres cómodos pasos:

  • Copias tu arreglo de tamaño N en otro de tamaño N+1.
  • En la posición N del nuevo arreglo escribes un carácter nulo.
  • Recorres el nuevo arreglo y sustituyes los saltos de línea por caracteres nulos.

Dicho con código podría quedar así:

char numeros[11] ={'1','2','4','5','n','2','3','n','5','2','1'};
char resultado[12];
resultado[11]='';
memcpy(resultado,numeros,11);

for(int i=0;i<12;i++)
{
  if(resultado[i]=='n')
    resultado[i]='';
}

Para imprimir las cadenas basta con localizar los caracteres nulos… Después de cada carácter nulo se encuentra el inicio de una de las cadenas buscadas:

printf("%sn",resultado);
for(int i=0;i<11;i++)
{
  if(resultado[i]=='')
    printf("%sn",&resultado[i+1]);
}

Si trabajas con memoria dinámica la cosa cambia ligeramente, pero como no das más detalles…

Un saludo

Respondido por: Anonymous

Leave a Reply

Your email address will not be published.