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)
| | |-+  Emular una funcion de una cadena(Resuelto)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Emular una funcion de una cadena(Resuelto)  (Leído 6,767 veces)
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Emular una funcion de una cadena(Resuelto)
« en: 4 Julio 2011, 19:29 pm »

Buenas a todos,estoy intentando emular la cadena strtok para que pida un caracter de la frase y lo elimine de esa cadena,quedando la cadena final sin ese caracter,lamentablemente me sale este error:
Código:
In function 'void cortarcadena(char*, char*)':
incompatible types in assignment of 'char' to 'char [30]'

He ido cambiando cosas pero no se donde está el fallo,tiene que ver con asignar una cadena a un caracter,pero lo que asigno es un caracter a un caracter,pego el codigo:
Código
  1. #include <stdio.h>
  2.  
  3. void cortarcadena(char *frase,char *caracter){
  4.    char *p = frase;
  5.    char *q = caracter;
  6. char c_temp;
  7. char c_ori[30];
  8.    while(*p!='\0'){
  9.                       if(*q==*p){
  10.                                  c_temp= *p;
  11.                                  *p++;
  12.  
  13.                                  }else{
  14.                                        c_ori=*p;
  15.                                        *p++;
  16.  
  17.                                        }
  18.                                        }
  19.                                       puts(c_ori);
  20.                                        }
  21.                                        int main (void){
  22.                                            char frase [30];
  23.                                            char caracter;
  24.                                            printf("vamos a quitar un caraacter a la frase");
  25.                                            printf("escriba la primera frase:  ");
  26.                                            gets(frase);
  27.                                            printf("escriba el caracter a eliminar: ");
  28.                                            scanf("%c",&caracter);
  29.                                            cortarcadena(frase,&caracter);
  30.                                            getchar();
  31.                                            return 0;
  32.                                            }
  33.  

Gracias al que pueda ayudarme.

Salu2


« Última modificación: 4 Julio 2011, 20:28 pm por Dark Invader » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Emular una funcion de una cadena
« Respuesta #1 en: 4 Julio 2011, 19:36 pm »

El problema es que no puedes asignar un array a un puntero (o indireccionando el puntero). Dinos que querías hacer para poder decirte qué hacer.

Saludos.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Emular una funcion de una cadena
« Respuesta #2 en: 4 Julio 2011, 19:44 pm »

Gracias por contestar Leo,

Mira lo que queria hacer es asignar un puntero al principio de la cadena,e ir recorriendola con el *p++,es decir,que fuera al siguiente elemento,el problema es ese,que no se a que es debido,porque he hecho otra funcion,la strcmp y me funciona perfecto:

Código
  1. #include <stdio.h>
  2.  
  3. void compararcadenas(char *cadena,char *cadena2){
  4.     char *p,*q;
  5.  
  6.     p=cadena;
  7.     q=cadena2;
  8.     while(*p!='\0' || *q!='\0'){
  9.  
  10.                    if(*p==*q){
  11.                              *p++;
  12.                              *q++;
  13.                              printf("\n\ntiene el mismo caracter,pasando al siguiente caracter...");
  14.                              if (*p!='\0') continue;
  15.                              if (*q!='\0') continue;
  16.  
  17.  
  18.            printf("\n\n!!Las cadenas son las mismas!!");
  19.  
  20.                              }else{
  21.  
  22.                                    printf("\n\nse presenta un caracter de diferencia,las cadenas no son las mismas");
  23.  
  24.  
  25.  
  26.  
  27.                                    if(*p =='\0' && *q !='\0'){
  28.                                          printf("\n\nla segunda cadena tiene mas longitud");
  29.                                          break;
  30.                                          }
  31.                                         if(*p !='\0' && *q =='\0'){
  32.                                               printf("\n\nla primera cadena tiene mas longitud");
  33.                                               break;}
  34.  
  35.                                                    printf("\n\n!!Las cadenas son distintas,pero tienen la misma longitud!!");break;
  36.  
  37.  
  38.                                    }
  39.                                   }
  40.  
  41.  
  42.                                   }
  43. int main (void){
  44.  
  45.   char cadena[40];
  46.   char cadena2[40];
  47.  
  48.   printf("escriba la primera cadena:  ");
  49.   gets(cadena);
  50.   printf("escriba la segunda cadena:  ");
  51.   gets(cadena2);
  52.   compararcadenas(cadena,cadena2);
  53.   getchar();
  54.   return 0;
  55. }

¿A qué crees que puede ser debido? :huh:

Salu2
En línea

El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: Emular una funcion de una cadena
« Respuesta #3 en: 4 Julio 2011, 19:44 pm »

Hola, en un rato de aburrimiento te he hecho una función como la que pides porque creo que has hecho una montaña de un granito de arena.
Todo esta hecho con las librerias standar del http://www.cplusplus.com/, si quieres info del codigo preguntame o miralo ahi.
Mi código lo que hace es eliminarte un sólo caracter de la frase que le pases, se puede hacer con mas de una letra, pero no me apetecia complicarme.

Aqui te dejo el codigo:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. char* cortarcadena(char *frase, char caracter){
  5.    string str(frase);
  6.    string::iterator it;
  7.    unsigned int num;
  8.    num = str.find(caracter);
  9.    it = str.begin() + num;
  10.    if(it == str.end()) return NULL;
  11.    str.erase(it);
  12.    return (char*)str.c_str();
  13.  
  14. }
  15.  
  16. int main(){
  17.    char* frase = "HOLAS";
  18.    frase = cortarcadena(frase, 'A');
  19.    cout << frase << endl;
  20.    return 0;
  21. }
  22.  

Un saludo!
En línea

Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Emular una funcion de una cadena
« Respuesta #4 en: 4 Julio 2011, 19:48 pm »

Hola El_Java  y gracias por contestar tambien,

El problema es que no domino muy bien C++ todavia,y queria que mi codigo fuera en C,porque las cadenas en C++ no la tengo muy controladas,solo queria ver exactamente donde esta el fallo de mi codigo.

De todas maneras muchas gracias.

Salu2
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Emular una funcion de una cadena
« Respuesta #5 en: 4 Julio 2011, 19:51 pm »


Mira lo que queria hacer es asignar un puntero al principio de la cadena,e ir recorriendola con el *p++,es decir,que fuera al siguiente elemento

Así es, pero bueno, el error está aquí:
Código:
c_ori=*p;
¿Qué es lo que querías hacer?
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Emular una funcion de una cadena
« Respuesta #6 en: 4 Julio 2011, 20:05 pm »

Resuelto,era lo que habias dicho Leo,esta poniendo una cadena pero no le estaba poniendo el numero de argumentos,y no los incrementaba,por eso he hecho un nuevo puntero a la cadena origen y ahora si compila,muchas gracias colega  :P
Código
  1. #include <stdio.h>
  2.  
  3. void cortarcadena(char *frase,char *caracter){
  4.    char *p;
  5.    char *q;
  6.    char *r;
  7.    p=frase;
  8.    q=caracter;
  9. char c_temp;
  10. char c_ori[30]="";
  11. r =c_ori;
  12.    while(*p!='\0'){
  13.                       if(*q==*p){
  14.                                  c_temp= *p;
  15.                                  *p++;
  16.  
  17.                                  }else{
  18.  
  19.                                        *r=*p;
  20.                                        *p++;
  21.                                        *r++;
  22.                                        }
  23.  
  24.                                        }
  25.                                       puts(c_ori);
  26.                                       getchar();
  27.                                        }
  28.                                        int main (void){
  29.                                            char frase [30];
  30.                                            char caracter;
  31.                                            printf("vamos a quitar un caraacter a la frase");
  32.                                            printf("escriba la primera frase:  ");
  33.                                            gets(frase);
  34.                                            printf("escriba el caracter a eliminar: ");
  35.                                            scanf("%c",&caracter);
  36.                                            cortarcadena(frase,&caracter);
  37.                                            getchar();
  38.                                            return 0;
  39.                                            }
  40.  
                       
 Tema resuelto  ::)

Salu2
   
« Última modificación: 4 Julio 2011, 20:27 pm por Dark Invader » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #7 en: 4 Julio 2011, 22:59 pm »

@Dar Invader

He probado la función, funciona (valga la redundancia), hay cosas que comentar, en primera está el indentado del código, está muy mal, debes corregirlo.

Y la función se puede acortar a esto (usando tu manera):

Código
  1. void cortarcadena(char *frase,char *caracter)
  2. {
  3.    char *p;
  4.    char *q;
  5.    char *r;
  6.    p = frase;
  7.    q = caracter;
  8.    char c_temp;
  9.    char c_ori[30]="";
  10.    r = c_ori;
  11.    while(*p)
  12.        if(*q == *p)
  13.            c_temp= *p++;
  14.        else
  15.            *r++ = *p++;
  16.    puts(c_ori);
  17.    getchar();
  18. }
  19.  

Código
  1. void cortarcadena(char *frase,char *caracter)
  2. {
  3.    char *p = frase;
  4.    char *q = caracter;
  5.    char *r;
  6.    char c_temp;
  7.    char c_ori[30]="";
  8.    r = c_ori;
  9.    while(*p)
  10.        *q == *p ? c_temp = *p++ : (*r++ = *p++);
  11.  
  12.    puts(c_ori);
  13.    getchar();
  14. }
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #8 en: 4 Julio 2011, 23:06 pm »

Tienes toda la razon,se puede acortar muchisimo,y parece mucho mas ordenador,gracias de nuevo colega  ;D

Salu2
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Emular una funcion de una cadena(Resuelto)
« Respuesta #9 en: 4 Julio 2011, 23:14 pm »

Aún te puedes ahorrar una variable, no hace falta que maniobres el caracter con un puntero ya que es una sola unidad, lo puedes omitir.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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