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)
| | |-+  ayuda con strings
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con strings  (Leído 2,333 veces)
marchiali

Desconectado Desconectado

Mensajes: 12


Ver Perfil
ayuda con strings
« en: 24 Julio 2014, 17:02 pm »

hola. quisiera que me guien un poco con el uso de las funciones de strings en c++.
lo que estoy tratando es de programar un algoritmo que, mediante una funcion, encuentre un char dentro de una cadena(string) y que la parte de la cadena anterior al char la copie en una cadena vacia, y la parte posterior al char en otra. el char no se copia en ninguna. lo que hice fue esto:

void split(char *s[], char *c1[], char *c2[], char *car){
   if (strstr(s[60], car)){
      char aux=s-strlen(strstr(s[60], car));
      strcat(c1[60], aux);
      strcat(c2[60], (strchr(s[60], (strlen(car)+1))));
   }
}

int main(int argc, char *argv[]) {
   char s[60]; char car; char c1[60]; char c2[60];
   cin.getline(s, 60);
   cin>>car;
   
   cout<<split(s,c1,c2,car);
   
   return 0;
}

pero me da errores, como que no puedo convertir char a const char. que significa esto? y como puedo arreglarlo? gracias.


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: ayuda con strings
« Respuesta #1 en: 24 Julio 2014, 17:09 pm »

Nota incial: Para el código, usa las etiquetas GeSHi, gracias.

Código
  1. void split(char *s[], char *c1[], char *c2[], char *car){
  2.   if (strstr(s[60], car)){
  3.      char aux=s-strlen(strstr(s[60], car));
  4.      strcat(c1[60], aux);
  5.      strcat(c2[60], (strchr(s[60], (strlen(car)+1))));
  6.   }
  7. }

'strstr' devuelve el puntero a la primera aparición de 'car'... si reutilizases ese valor tendrías medio trabajo hecho...

Una cosa que no entiendo es por qué tienes 's[60]' en el strstr, en el strlen, en... eso está mal.

Código
  1. void split(char *s[], char *c1[], char *c2[], char *car){
  2.   if (strstr(s, car)){
  3.      char aux=s-strlen(strstr(s, car));
  4.      strcat(c1, aux);
  5.      strcat(c2, (strchr(s, (strlen(car)+1))));
  6.   }
  7. }

De primeras no se si así funcionará... no puedo compilar ahora, pero al menos pasas punteros a las funciones en vez de valores que no tienen ningún sentido.


En línea

marchiali

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: ayuda con strings
« Respuesta #2 en: 24 Julio 2014, 17:27 pm »

probe con tus correcciones pero el programa no compila. yo le puse indices a los strings porque crei que era necesario dimencionarlos. no hace falta cuando se programa en una funcion?
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: ayuda con strings
« Respuesta #3 en: 24 Julio 2014, 17:40 pm »

El tamaño de los arrays solo hay que ponerlo, salvo que se me olvide algún caso concreto, en las siguientes circunstancias:

* Cuando los declaras en el stack (es decir, no usas memoria dinámica):

Código
  1. char cadena[200];

* Cuando pasas un array multidimensional ubicado en el stack como parámetro de una función:

Código
  1. void procesarMatriz( int matriz[10][20] );

Cuando usas un arreglo, una vez creado, el compilador ya sabe qué es lo que está manejando... no necesitas recordárselo cada dos líneas. Además que tu código es peligroso:

Código
  1. char cadena[4];
  2. strcpy( cadena, "abc" ); // Ok
  3.  
  4. printf( "%c %c %c", cadena[ 0 ], cadena[ 1 ], cadena[ 2 ] );

Fíjate que al pasar el índice recupero uno de los elementos del arreglo... funciones como strstr, strcpy... necesitan un puntero que indice dónde deben empezar a leer / escribir... si en vez de eso les pasas otra cosa acabarán escribiendo en zonas de memoria que no te corresponden y el programa, en el mejor de los casos, fallará estrepitosamente.

En el ejemplo que te he puesto, si hubieses puesto

Código
  1. strcpy( cadena[4], "abc" );

Estarías indicando que quieres que se copie en la dirección apuntada por el cuarto elemento de cadena, la secuencia "abc"... puedes acabar escribiendo en cualquier parte de la memoria por error.

Si no eres capaz de entender lo que intento explicarte no te asustes, eso únicamente quiere decir que deberías comprarte un buen libro de C y seguirlo desde el principio antes de continuar con este tipo de prácticas... los inicios en la programación nunca son fáciles.
En línea

marchiali

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: ayuda con strings
« Respuesta #4 en: 24 Julio 2014, 17:55 pm »

si, es bastante complicado pero de a poco creo que lo voy entendiendo. gracias por la ayuda!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda funciones de strings
Programación C/C++
twiny14 3 2,553 Último mensaje 26 Junio 2014, 04:01 am
por daryo
ayuda con strings
Programación C/C++
marchiali 3 2,398 Último mensaje 25 Agosto 2014, 20:04 pm
por engel lex
Ayuda con C++ y ordenar vector de strings
Programación C/C++
rodrial12 1 6,129 Último mensaje 15 Septiembre 2014, 08:35 am
por eferion
Ayuda con scilab No repetir cadena de strings
Programación General
Mary_T 1 1,934 Último mensaje 9 Mayo 2015, 13:38 pm
por fran800m
(Ayuda) Array de strings.
Programación C/C++
S++ 4 2,854 Último mensaje 11 Junio 2015, 03:59 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines