elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con código para re ordenar array
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con código para re ordenar array  (Leído 9,088 veces)
ZedGe

Desconectado Desconectado

Mensajes: 154


Ver Perfil
Ayuda con código para re ordenar array
« en: 2 Abril 2013, 17:47 pm »

Lo que necesito es que dado un array de largo 80, cree otro que re ordene los datos del anterior según la clase de los datos.

En otras palabras, entra un código de letras y numero, y necesito que en el nuevo arreglo, en cada casilla se guarden los números y letras por separado según se lean.

Adjunto una imagen para que me entiendan mejor, el primero es el código que entra, y lo de abajo es como necesito que quede el otro arreglo.




Este es el código erróneo que tengo hasta ahora:


Código:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <string.h>


using namespace std;


char* organizar(char *operacion);

int main()
{
    char dato_entrada[80];
    cout << "Ingrese Codigo: ";
    cin  >> dato_entrada;
    char* operacion = organizar(dato_entrada);
    printf(operacion);
    return 0;
}


char* organizar (char* operacion){

int largo=0;  //largo total
int largo2=0; //recorre aux2
int largo3=0; //recorre el codigo inicial
while (operacion[largo]!='\0') largo++;//cuenta el largo del codigo

char* aux2 = '\0'; //array que tendra la separaciones

while(largo3 < largo){

if(operacion[largo3] != '0' || operacion[largo3] != '1' || operacion[largo3] != '2'){
aux2[largo2] = strcpy(aux2[largo2],operacion[largo3]); //si encuentra un 0 1 o 2 lo guarda
printf(aux2[largo2]);
largo3++;
}

else if (operacion[largo3] != 'a' || operacion[largo3] != 'b' || operacion[largo3] != 'c'){
aux2[largo2] = strcpy(aux2[largo2],&operacion[largo3]); //si encuentra un a b o c lo guarda
printf(aux2[largo2]);
largo3++;
}

else largo2++;

}

return aux2;
}


En línea

Wofo

Desconectado Desconectado

Mensajes: 168


Ver Perfil
Re: Ayuda con código para re ordenar array
« Respuesta #1 en: 2 Abril 2013, 20:16 pm »

No he leído tu código, pero has incluido "stdio.h" dos veces.


En línea

Puntoinfinito


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: Ayuda con código para re ordenar array
« Respuesta #2 en: 2 Abril 2013, 21:03 pm »

Más fácil todavía. Primero miras el tamaño de la char, todo y que sabemos su tamaño.

Código:
dato_entrada.size();

Ahora con un ciclo vas mirando una por una diciendo si es letra o número;

Código:
... !variable > Z ...

Esto lo verifica, entonces haces que vaya almacenando contenido a una misma posición que ya iras controlando con una variable y con append vas añadiendo, y en caso de que esto cambie (haces un else puro y duro) lo vaya almacenando a la siguiente posición y vaya ordenándolo. Y listo.
En línea

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.
ZedGe

Desconectado Desconectado

Mensajes: 154


Ver Perfil
Re: Ayuda con código para re ordenar array
« Respuesta #3 en: 2 Abril 2013, 23:27 pm »


Esto lo verifica, entonces haces que vaya almacenando contenido a una misma posición que ya iras controlando con una variable y con append vas añadiendo, y en caso de que esto cambie (haces un else puro y duro) lo vaya almacenando a la siguiente posición y vaya ordenándolo. Y listo.

use el append pero me da problemas al querer trabajar con char* :/
En línea

Puntoinfinito


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: Ayuda con código para re ordenar array
« Respuesta #4 en: 3 Abril 2013, 16:26 pm »

Si muestras parte del código te puedo ayudar mucho mejor ;)

Ahora que caigo append es un parametro de la librería string, pero de todas maneras creo que se puede utilizar con char. La utilización tendría que ser;
Código
  1. char variable[4] = {'H', 'o','l'}; //creamos una sequencia char con un espacio libre
  2. append(variable[3],'a'); //lo rellenamos

Esto recuerda que se puede hacer de manera automática;

Código
  1. for (int i = 0;i<variable.size();i++) {
  2. append(variable[i],'loquesea');
  3. }
  4.  

Si continuas teniendo error, utiliza strcpy, que es el que utilizaba yo;

Código
  1. char a[12] = "World";       /*  12 = strlen("Hello World") + 1  */
  2. strcpy(a, "Hello World");

Saludos!!  :D
En línea

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.
ZedGe

Desconectado Desconectado

Mensajes: 154


Ver Perfil
Re: Ayuda con código para re ordenar array
« Respuesta #5 en: 3 Abril 2013, 23:41 pm »

Me sigue dando errores al usar append o strcpy,que no puedo pasar de char a const char, o derrepente sale de char a char*
En línea

85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Ayuda con código para re ordenar array
« Respuesta #6 en: 4 Abril 2013, 02:40 am »

El tema de const char* a char* o vice versa, es un tema de 'casting', se soluciona haciendo casting y listo, puesto que 'const' es tan sólo una protección del compilador a nivel código, para el programador, para que se remarquen que ciertas "cosas" son constantes. Y Siendo así, deberías o bien respetar esto o bien saber muy bien por qué habrías de cambiarlo..
En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
Puntoinfinito


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: Ayuda con código para re ordenar array
« Respuesta #7 en: 4 Abril 2013, 15:03 pm »

Sube código
En línea

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.
ZedGe

Desconectado Desconectado

Mensajes: 154


Ver Perfil
Re: Ayuda con código para re ordenar array
« Respuesta #8 en: 4 Abril 2013, 17:11 pm »

El codigo es ese que subi en el post :S
En línea

85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Ayuda con código para re ordenar array
« Respuesta #9 en: 4 Abril 2013, 18:39 pm »

Si se trata de escribir una cadena alfanumérica y hacer que la misma se divida en bloques separados de letras o números, entonces en ese caso escribí un código simple que hace eso, el tema es que justo me dieron ganas de no hacer nada XD y lo dejé funcionando pero sin terminar ya que no llegué a implementar memoria dinámica para que quede terminado.
En lugar de eso existe un array de cadenas de un máximo aceptable de 20 cadenas, pero para ver como se hace te va a servir.
Tu código dijiste que estaba mal por eso te muestro este otro código.

Como te dije, está sin terminar pero por eso mismo si te interesa lo podés terminar, implementando memoria dinámica para el array de cadenas que vas a usar para guardar todos los bloques.

Código
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<string.h>
  4. //http://www.cplusplus.com/reference/cstdlib/realloc/
  5.  
  6.  
  7. int main(){
  8.  
  9.  
  10. char cadena[512];
  11. //char** array_de_cadenas_r = 0;
  12. //char** array_de_cadenas = (char**)malloc(sizeof(char)*1);
  13. //array_de_cadenas[0] = (char*)malloc(sizeof(char)*128);
  14.  
  15. char array_de_cadenas[20][128] = {{0}};
  16.  
  17. printf("ingrese la cadena..\n");
  18. scanf("%s", cadena);
  19.  
  20. int modo=0;
  21. int pos=-1;
  22. int let;
  23. int num;
  24. int i=0;
  25. int j;
  26. while(cadena[i]){
  27.  
  28. if(pos == 20) break;
  29.  
  30. if(cadena[i] >= 'a' && cadena[i]<='z'){
  31. let++;
  32. num=0;
  33. }
  34. else if(cadena[i] >= 'A' && cadena[i]<='Z'){
  35. let++;
  36. num=0;
  37. }
  38. else if(cadena[i] >= '0' && cadena[i]<='9'){
  39. num++;
  40. let=0;
  41. }
  42. else
  43. {
  44. let=0;
  45. num=0;
  46. }
  47.  
  48. if((modo==1&&let)||(modo==2&&num));
  49. else
  50. {
  51. pos++;
  52. j=0;
  53.  
  54. //int a=0;
  55. //char backup[512];
  56. //strcpy(backup, array_de_cadenas[a]);
  57. //array_de_cadenas_r = (char**)realloc(array_de_cadenas, sizeof(char)*(pos+1));
  58. //array_de_cadenas[pos] = (char*)malloc(sizeof(char)*128);
  59. }
  60.  
  61.  
  62. if(let){
  63.  
  64. array_de_cadenas[pos][j] = cadena[i];
  65. j++;
  66. modo=1;
  67. }
  68. else if(num){
  69.  
  70. array_de_cadenas[pos][j] = cadena[i];
  71. j++;
  72. modo=2;
  73. }
  74. else
  75. {
  76. modo=0;
  77. }
  78.  
  79. i++;
  80. }
  81.  
  82. for(int b=0; b<pos+1; b++){
  83.      printf(array_de_cadenas[b]);
  84.      putchar('\n');
  85. }
  86.  
  87. //for(int c=0; c<pos; c++) free(array_de_cadenas[c]);
  88. //free(array_de_cadenas);
  89.  
  90. system("pause");
  91. return 0;
  92. }
  93.  
En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines