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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  copiar caracteres uno a uno
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: copiar caracteres uno a uno  (Leído 8,024 veces)
bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
copiar caracteres uno a uno
« en: 23 Mayo 2015, 04:53 am »

Buenas a todos !!

tengo una duda , tengo un par de horas tratando de hacer algo con un string es quiero copiar caracter a caracter usando varoas funciones pero nada de funcionar le pondre lo que he hecho.
Código
  1.  
  2.  
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<iostream>
  6.  
  7. using namespace std;
  8.  
  9. void copiar(){
  10.   char *szBuffer1 = "mi cadena es esta ";
  11.   char *szCopia;
  12.  char  caracterAcaracter[30];
  13.  
  14.   ///la plataforma en la que lo uso no tiene malloc
  15.  memset(szCopia, 0x00, strlen(szBuffer1));
  16.  
  17.  
  18.    for(int i = strlen(szBuffer1)); i < -1 ; i--)
  19.      {
  20.  
  21.       caracterAcaracter[i] = szBuffer[1];
  22.      strcat(szCopia, szBuffer1[i]);
  23.     strcpy(szCopia, szBuffer1[i]); ///igual pasa con los que piden n caracateres para cpiar
  24.                                                   /// no me deja por que el segundo argumento pide const char *
  25.                                                   ///strtok no se bien si alguien me aconseja si me conviene                                                
  26. }
  27.  
  28.  
  29.  
  30.  
  31.  
  32. }
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  




podrian darme algun consejo o decirme donde podria leer mas sobre lo string y caracteres , gracias y discuplen la molestia .


En línea

gracias por responder mis dudas
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: copiar caracteres uno a uno
« Respuesta #1 en: 23 Mayo 2015, 11:14 am »

Sobra un paréntesis en el for, la variable szBuffer no existe... Como quieres que funcione si ni compila?


En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #2 en: 23 Mayo 2015, 12:41 pm »

fue un error digintandolo aqui , ayer tenia sueno, lol , pero de todos modos cuando trato de usar strcpy o strcat me da u error ya que el dato no es constante ,y uso el indice para copiar el programa estalla !!

tambien estoy  he intentando esto:
Código
  1. #include<cstring>
  2. #include<iostream>
  3. #include<stdlib.h>
  4. #include<ctime>
  5. using namespace std;
  6.  
  7.  
  8. int main(){
  9.  
  10.  char *szBuffer ={"est buffer es enorme y solo quiero<aqui> cargar una parte del "};
  11.    int inlen = 0;
  12.    while(strstr(szBuffer, "<aqui>")!=NULL){
  13.      inlen++;
  14.   }
  15.  
  16.  
  17.   char *szif;
  18.  
  19.   for(int i = 0 ; i < inlen; i++ )
  20.   {
  21.       memset(szif, szBuffer[i], inlen);
  22.      cout << szif[i]<<endl ;
  23.    }  
  24.  
  25.  
  26. }
  27.  
  28.  
  29.  


y tambien intente este

Código
  1. #include<cstring>
  2. #include<iostream>
  3. #include<stdlib.h>
  4. #include<ctime>
  5. using namespace std;
  6.  
  7.  
  8. int main(){
  9.  
  10.  char *szBuffer ={"est buffer es enorme y solo quiero<aqui> cargar una parte del "};
  11.    int inlen = 0;
  12.  char *xc = strtok(szBuffer, " ");
  13.    while(strtok(xc, " ")!=NULL){
  14.      inlen++;
  15.   }
  16.  
  17.  
  18.   char *szif;
  19.  
  20.   for(int i = 0 ; i < inlen; i++ )
  21.   {
  22.       memset(szif, szBuffer[i], inlen);
  23.      cout << szif[i]<<endl ;
  24.    }  
  25.  
  26.  
  27. }


Código
  1. /* strtok example */
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <iostream>
  5. using namespace std;
  6. int main ()
  7. {
  8.  char str[] ="- caracter de ejemplo buscado espacios.";
  9.  char *szBuffer;
  10.  memset(szBuffer, 0x0, 2000 );
  11.  char *pch = strtok(str, " ");
  12.  while(pch != NULL)
  13.  {
  14.    strcat(szBuffer, pch);
  15.    strcat(szBuffer, "\n");
  16.    pch= strtok(NULL, " ");
  17.    cout <<szBuffer <<endl;
  18.  
  19.  }
  20.  return 0;
  21. }

como podria usar memset en puntero de dos dimensiones !!
y me da core dmped

y que inclui ctime lo pueden obviar por favor :)


y como dije anteriormente strcpy , strncpy, strcat , strncat solo aceptan el segundo argumento const  char * y la verdad seguire intentandolo ,gracias

gracias
« Última modificación: 23 Mayo 2015, 14:52 pm por bash » En línea

gracias por responder mis dudas
Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #3 en: 23 Mayo 2015, 15:46 pm »

Vamos a ver:

Código
  1. #include <cstring>
  2. #include <iostream>
  3. #include <stdlib.h>
  4. #include <ctime>
  5.  
  6. using namespace std;
  7.  
  8. void copiar() {
  9.   char const *szBuffer1 = "mi cadena es esta"; // No necesitas un espacio al final. Ya hay un \0 implícito.
  10.   char *szCopia;
  11.   char  caracterAcaracter[30];
  12.  
  13.   // la plataforma en la que lo uso no tiene malloc.
  14.   memset(szCopia, 0x00, strlen(szBuffer1));
  15.  
  16.   strcpy(szCopia, szBuffer1);
  17.   strcpy(caracterAcaracter, szBuffer1);
  18. }

Ésto debería funcionarte. La función `strcpy` recorre la segunda cadena carácter a carácter, hasta que encuentra un '\0', y la va copiando en la primera.

Lo que me gustaría saber es para qué quieres la variable `szCopia` si después no la devuelves. Por otro lado, si trabajas con C++, podrías hacer sencillamente:

Código
  1. void copiar()
  2. {
  3.     char const* szBuffer1 = "mi cadena es esta";
  4.     string copia1(szBuffer1);
  5.     string copia2(szBuffer1);
  6. }
« Última modificación: 23 Mayo 2015, 17:49 pm por Peregring-lk » En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #4 en: 23 Mayo 2015, 16:46 pm »

tienes razon con c++ podria ser mas facil , pero tengo que usar c y estoy limitado ne recurso por eso quiero saber si alguien me da un pequeno tip , he intentado pero todo  ha sido en vano , no pongo todo el codigo pero creeme  todo esos bufferes tienen motivo de estar ahi , quiero parsear un xml y solo quiero obtener una subcadena o quiero "chop" y solo sacar una parte por que a donde la voy a pasar (dispositivo empotrado ) tiene poca memoria y quiero recortar a ver si pueder reducir el tamano , lo digo para dar mas info de lo que quiero hacer.

ahora estoy pensando cortar palabra por palabra , me recomienda usar strtok  con un puntero de dos dimensiones ? tengo el tamano maximo de caracteres que quiero capturar "


por cierto strcpy () es strcpy(char * c, const char * dd);
el compilador me da un error cuando trato de compilar con una buffer o char * no constante , es lo mismo con strcat y derivados de ellos .

Gracias
« Última modificación: 23 Mayo 2015, 16:47 pm por bash » En línea

gracias por responder mis dudas
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: copiar caracteres uno a uno
« Respuesta #5 en: 23 Mayo 2015, 17:19 pm »

y porque el char* de origen no puede ser constante?
En línea

Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #6 en: 23 Mayo 2015, 17:51 pm »

Perdón, perdón. Fallo mío. Los literales de cadena ("cadena"), tiene tipo `const char*` por defecto. Me equivoqué escribiendo aquí (ya está corregido).

Y si estás programando en C, programa en C y no incluyas cabeceras de C++, etc:

Código
  1. #include <string.h>
  2.  
  3. void copiar() {
  4.    char const *szBuffer1 = "mi cadena es esta"; // No necesitas un espacio al final. Ya hay un \0 implícito.
  5.    char *szCopia;
  6.    char  caracterAcaracter[30];
  7.  
  8.    // la plataforma en la que lo uso no tiene malloc.
  9.    memset(szCopia, 0x00, strlen(szBuffer1));
  10.  
  11.    strcpy(szCopia, szBuffer1);
  12.    strcpy(caracterAcaracter, szBuffer1);
  13. }
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #7 en: 23 Mayo 2015, 18:08 pm »

Bueno es c y un c++ recortado !! jajajaja

gracias ,  aunque lo que quiero es por ejemplo   

 strcpy(caracterAcaracter, szBuffer1[1]); por ejemplo jajajja si es dificil
« Última modificación: 23 Mayo 2015, 18:10 pm por bash » En línea

gracias por responder mis dudas
bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #8 en: 23 Mayo 2015, 19:06 pm »

estaba viendo de un tema pasado sobre caracteres y cadena en c
 

estoy probando algo de c++ aunque no me han aprobado en el trabajo para hablar ahora por que el programa estalla ?
Código
  1. //this is cpu intesive function
  2. char *szDropToken(char * szBufferCompleto){
  3.  
  4.   string szBuffer[2000];
  5.       int len= strlen(szBufferCompleto);
  6.       int inlen = 0;
  7.       char *szRet;
  8.  
  9.  
  10.  
  11.       while( len >inlen  )
  12.       {
  13.       char *pch =strtok( szBufferCompleto , " ");
  14.       while(NULL, " "){
  15.       pch =  strtok(NULL, " ");
  16.       szBuffer[len] = pch;
  17.  
  18.       if(strstr(szBuffer[inlen].c_str(), "<ArhivoTransacciones>") == NULL )
  19.       {
  20.       inlen++;
  21.  
  22.       continue;
  23.       }else break;
  24.  
  25.       }
  26.  
  27.       for(int i; i < inlen ; i++)
  28.       {
  29.  
  30.               strcat(szRet, szBuffer[i].c_str());
  31.  
  32.       }
  33.   retunr szRet;
  34.       }
  35.  

aun explota el programa
En línea

gracias por responder mis dudas
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: copiar caracteres uno a uno
« Respuesta #9 en: 23 Mayo 2015, 19:12 pm »

Estan trabajando con punteros indefinidos:
char *szRet;
char *szCopia;

Hay que asignarle un valor llamando a malloc o a new.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Caracteres a-z A-Z 0-9
Programación Visual Basic
Kizar 5 2,437 Último mensaje 22 Enero 2006, 17:43 pm
por Kizar
copiar caracteres en una cadena « 1 2 3 »
Programación C/C++
mapers 22 21,980 Último mensaje 9 Julio 2010, 05:15 am
por mapers
Alguien sabe buscar palabra de x caracteres y los demás caracteres a continuació
Programación Visual Basic
usuario oculto 3 5,044 Último mensaje 2 Agosto 2010, 18:36 pm
por Psyke1
[C] Copiar arreglo de caracteres con Operador Igual
Programación C/C++
AlbertoBSD 8 4,179 Último mensaje 25 Junio 2016, 11:40 am
por fary
Copiar caracteres
Programación C/C++
Dato Vagabundo 3 2,371 Último mensaje 5 Octubre 2017, 03:51 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines