Autor
|
Tema: Ayuda con código para re ordenar array (Leído 9,088 veces)
|
ZedGe
Desconectado
Mensajes: 154
|
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: #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
Mensajes: 168
|
No he leído tu código, pero has incluido "stdio.h" dos veces.
|
|
|
En línea
|
|
|
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
Más fácil todavía. Primero miras el tamaño de la char, todo y que sabemos su tamaño. Ahora con un ciclo vas mirando una por una diciendo si es letra o número; 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
|
|
|
|
ZedGe
Desconectado
Mensajes: 154
|
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
Mensajes: 919
#! /win/archlinux
|
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; char variable[4] = {'H', 'o','l'}; //creamos una sequencia char con un espacio libre append(variable[3],'a'); //lo rellenamos
Esto recuerda que se puede hacer de manera automática; for (int i = 0;i<variable.size();i++) { append(variable[i],'loquesea'); }
Si continuas teniendo error, utiliza strcpy, que es el que utilizaba yo; char a[12] = "World"; /* 12 = strlen("Hello World") + 1 */ strcpy(a, "Hello World");
Saludos!!
|
|
|
En línea
|
|
|
|
ZedGe
Desconectado
Mensajes: 154
|
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
|
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
|
|
|
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
Sube código
|
|
|
En línea
|
|
|
|
ZedGe
Desconectado
Mensajes: 154
|
El codigo es ese que subi en el post :S
|
|
|
En línea
|
|
|
|
85
|
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. #include<stdlib.h> #include<stdio.h> #include<string.h> //http://www.cplusplus.com/reference/cstdlib/realloc/ int main(){ char cadena[512]; //char** array_de_cadenas_r = 0; //char** array_de_cadenas = (char**)malloc(sizeof(char)*1); //array_de_cadenas[0] = (char*)malloc(sizeof(char)*128); char array_de_cadenas[20][128] = {{0}}; printf("ingrese la cadena..\n"); scanf("%s", cadena); int modo=0; int pos=-1; int let; int num; int i=0; int j; while(cadena[i]){ if(pos == 20) break; if(cadena[i] >= 'a' && cadena[i]<='z'){ let++; num=0; } else if(cadena[i] >= 'A' && cadena[i]<='Z'){ let++; num=0; } else if(cadena[i] >= '0' && cadena[i]<='9'){ num++; let=0; } else { let=0; num=0; } if((modo==1&&let)||(modo==2&&num)); else { pos++; j=0; //int a=0; //char backup[512]; //strcpy(backup, array_de_cadenas[a]); //array_de_cadenas_r = (char**)realloc(array_de_cadenas, sizeof(char)*(pos+1)); //array_de_cadenas[pos] = (char*)malloc(sizeof(char)*128); } if(let){ array_de_cadenas[pos][j] = cadena[i]; j++; modo=1; } else if(num){ array_de_cadenas[pos][j] = cadena[i]; j++; modo=2; } else { modo=0; } i++; } for(int b=0; b<pos+1; b++){ printf(array_de_cadenas[b]); putchar('\n'); } //for(int c=0; c<pos; c++) free(array_de_cadenas[c]); //free(array_de_cadenas); system("pause"); return 0; }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ordenar un array de manera que queden del más cercano a M hasta el más alejado
Programación C/C++
|
maritere22
|
3
|
2,765
|
10 Abril 2013, 17:17 pm
por rir3760
|
|
|
Quiero ver el código del método array.Clone() de C#
.NET (C#, VB.NET, ASP)
|
DanteInfernum
|
5
|
3,394
|
27 Agosto 2013, 18:53 pm
por DanteInfernum
|
|
|
Ayuda para ordenar Array
.NET (C#, VB.NET, ASP)
|
bybaal
|
2
|
2,856
|
15 Abril 2016, 12:37 pm
por bybaal
|
|
|
No encuentro el error en este codigo para ordenar
Programación C/C++
|
Kougami
|
3
|
2,684
|
17 Febrero 2018, 22:40 pm
por MAFUS
|
|
|
ayuda para ordenar datos de un archivo en c
Programación C/C++
|
jkomarcelino
|
0
|
1,677
|
3 Agosto 2018, 03:54 am
por jkomarcelino
|
|