🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #828

Re: Ayuda con punteros [C]

#828
From: AnimAlf
Date: Wed, 30 Aug 2006 14:50
116 lines
4755 bytes
Ahhh! Estoy leyendo en google i veo que no se publicó ninguna
respuesta mia :(( no estiendo.

La reenvio. Y gracias a todos por la ayuda :))

El dc 23 de 08 del 2006 a les 11:53 +0000, en/na Claudio va escriure:

> Esto mejor se pone como  strcpy (tmpStr, tmpStr+1)
> Y la función strcpy exige que las cadenas no tengan
> partes comunes, no deberías usarla en ese caso.

Soy muy desconocedor de tema, siempre optenia un desagrable violación
de
segmento

> Además tal y como lo pones es ineficiente porque
> haces varios strcpy, cuando en realidad basta uno.
>
> Como lo que te pasan es un char **flujo, lo fácil debe ser
> cambiar *flujo: while (*flujo && *flujo==' ') *flujo++;
> algo así.

grácias, tras hoy, todo esto me empieza a parecer menos abstracto (lo
de
los desplazamientos por memoria)

El dc 23 de 08 del 2006 a les 11:04 +0200, en/na Pascal Bourguignon va
escriure:
> AnimAlf <AnimAlf@engendro.sytes.net> writes:
>
> > Hola,
> >
> > ¿Cómo puedo solucionarlo?
>
> Dividiendo para conquistar.  En lugar de hacer todo en una sola
> función, haga solo una parte más simple.

Muchisimas grácias. Me va a servir mucho más que toda la teoria que
por
muchas veces que me repita a mi mismo, no logro comprender.

> /* Te queda como ejercicio: añadir un parametro const char* junk a las
>    funciones string_trim, string_trim_left y string_trim_right, y
hacer
>    que quiten cualquier caracterio en la cadena junk, no solo
espacios.
>    Así podremos hacer:
>
>        string_trim("#_","#______cadena______#") --> "cadena"     */
>
>
> /* Y si el tema de la gestión de memoria ocure, vease:

Vale :))
Como siempre primero me vuelvo loco intentando hacer como lo haría en
Pascal ... y despues de perder los nervios i no encontrar algo similar
al 'in' de pascal, pués función nueva.

me hubiese gustado poder haber echo algo como if (c in [str])

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdbool.h>

bool en (char *grupo, char c){
  int i;
  for (i=0; i<strlen(grupo); i++) {if (grupo[i]==c){return true;}};
  return false;
}

const char* string_trim_left(const char* string, char* junk){
  while(en(junk,(*string))){string++;}
  return(string);
}

char* string_substring(const char* string,int start,int end){
  char* result=(char*)malloc(end-start+1);
  strncpy(result,string+start,end-start);
  result[end-start]='\0';
  return(result);
}

const char* string_trim_right(const char* string, char* junk){
  const char* end=string+strlen(string);
  do{
    if(string==end){ return("");}
    end--;
  }while(en(junk,(*end)));
  return(string_substring(string,0,end-string+1));
}

const char* string_trim(const char* string, char* junk){
 return(string_trim_right(string_trim_left(string,junk),junk));}

int main(){
  char * junk = "#_ ";
  const char* cadena[]={
    "",
    "x","    x","x     ","     x     ",
    "xyz","    xyz","xyz     ","     xyz     ",
    "x y z","    x y z","x y z     ","     x y z     ",
    "       cadena       ",
    "#______cadena______#",
    "       cad          ",
    "#      cadena       ",
    "       cadena      #",
    0};
  int i;
  for(i=0;cadena[i];i++){
    const char* result;
    printf ("\n\nDEBUG: Antes:\t[%s]\n",cadena[i]);
    result=string_trim(cadena[i], junk);
    printf ("DEBUG: Despues:\t[%s]\n",result);}
    return(0);
}
Technical Details
Message-ID: <1156949426.036392.49600@74g2000cwt.googlegroups.com>
Path: arc1-ca.pugleaf.net!g2news2.google.com!postnews.google.com!74g2000cwt.googlegroups.com!not-for-mail
References: <1156305914.21671.6.camel@general.engendro.sytes.net>

Show Full Headers
Complete Article Headers
X-Google-Thread: f86c8,b5fe46047b709e60
X-Google-Attributes: gidf86c8,public
X-Google-Language: SPANISH,ASCII
Path: arc1-ca.pugleaf.net!g2news2.google.com!postnews.google.com!74g2000cwt.googlegroups.com!not-for-mail
From: "AnimAlf" <AnimAlf@engendro.sytes.net>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Ayuda con punteros [C]
Date: 30 Aug 2006 07:50:26 -0700
Organization: http://groups.google.com
Lines: 117
Message-ID: <1156949426.036392.49600@74g2000cwt.googlegroups.com>
References: <1156305914.21671.6.camel@general.engendro.sytes.net>
NNTP-Posting-Host: 80.32.76.249
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
X-Trace: posting.google.com 1156949431 7225 127.0.0.1 (30 Aug 2006 14:50:31 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Wed, 30 Aug 2006 14:50:31 +0000 (UTC)
In-Reply-To: <1156305914.21671.6.camel@general.engendro.sytes.net>
User-Agent: G2/0.2
X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); es-ES; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4,gzip(gfe),gzip(gfe)
Complaints-To: groups-abuse@google.com
Injection-Info: 74g2000cwt.googlegroups.com; posting-host=80.32.76.249;
   posting-account=ocQ8Qg0AAAC5mV8rLV18ktpgivZSQbhs