Pages: [1]   Go Down
Author Topic: Cortar char y convertirlo a char*  (Read 3943 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

necesito cortar un string.
el problema es q me llega un char para eso necesito convertirlo a char*

el char q me llega es: alrm1=2030
pero antes de eso, necesito pasar de char a char*

necesito q quede
char* a: alarm1
char* b: 20
char* c: 30

alguien sabe como convertir de char a char*
« Last Edit: April 29, 2012, 09:54:52 pm by coleoptero » Logged

0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 92
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prueba con la función strtok de C.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ammm me das una idea de como es el código?
o donde buscar información
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 727
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habría muchas formas de parsear la cadena. Tendríamos que saber si la cadena que llega tiene siempre esa estructura: una serie de caracteres iniciales (por ejemplo, hasta smiley-cool, un carácter '=' y 4 dígitos
Si es así, podrías hacer algo así
Code:
char cadena[] = "alrm1=2030";
char *p, a[15], b[5], c[3];

// la primera parte
strcpy(a, cadena);
p = strchr(a, '=');
if(p != NULL) *p = '\0';  // se corta en el carácter '='

// segunda parte, se copia a partir de '=' y se corta dejando 2
p = strchr(cadena, '=');
if(p != NULL)
{
   strcpy(b, ++p);
   b[2] = '\0'; 
}

// tercera parte
p = strchr(cadena, '=');
if(p != NULL)
{
   p += 3;   // se corren 3 posiciones y se copia lo que queda
   strcpy(c, p);
}


Si las variables tienen que ser necesariamente punteros, puedes tener definidos dichos punteros, y luego apuntar al inicio de cada cadena
Code:
char *pa, *pb, *pc;

pa = &a[0];
pb = &b[0];
pc = &c[0];

Lo que no puedes es copiar una cadena en un puntero como char *a sin antes reservar espacio con malloc()

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

curro92 el código funciona perfecto, el único problema es q
cuando tu pones cadena[] = "alarm1=2030"; en realidad yo lo asigno de una variable
llamada c que es un char y no se cuanto puede tener de largo, pero el largo no es problema ya
q puedo poner q si el largo es de 10 ente a esta función.


Code:
char c = client.read();
char cadena[] = c;
char *p, a[15], b[5], c[3];

yo tengo eso y me da el error: error: initializer fails to determine size of 'cadena'
Logged

0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 92
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Santo google...
http://www.elook.org/programming/c/strtok.html
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si lo de cortar el char esta listo el problema es la convercion de las variables
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 727
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Hola Maverik,
Una variable declarada como
Code:
char c
  solo puede contener un único carácter. En tu caso supongo que se trata de una cadena, habría que definir como
Code:
char c[xx]
De todas formas, una cadena char siempre acaba en carácter nulo ('\0'). Puedes recorrer la cadena hasta llegar a ese carácter nulo
Code:
// suponiendo que la cadena está en char c[]
int n;

n = 0;
while(c[n] != '\0')
{
     // aquí haces lo que sea
    n++;
}


Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Curro92
mira te paso parte de mi codigo para que entiendas mas como es.

Code:
char c = client.read();
        if(readString.length() < 100)
        {
          readString.append(c);
        }
        if(c == '\n')
        {

          ////////**********alarma*********///////
          //          alrm1=20.50.ON
          //          acc1=ON

          int n;
          char t[10];
          n = 0;
          while(c[n] != '\0')
          {
            t= t + c[n];// aquí haces lo que sea
            n++;
          }

          char cadena[] = c;
          char *p, a[15], b[5], c[3];

          // la primera parte
          strcpy(a, cadena);
          p = strchr(a, '=');
          if(p != NULL) *p = '\0';  // se corta en el carácter '='

          // segunda parte, se copia a partir de '=' y se corta dejando 2
          p = strchr(cadena, '=');
          if(p != NULL)
          {
            strcpy(b, ++p);
            b[2] = '\0'; 
          }

          // tercera parte
          p = strchr(cadena, '=');
          if(p != NULL)
          {
            p += 3;   // se corren 3 posiciones y se copia lo que queda
            strcpy(c, p);
          }

          char *pa, *pb, *pc;
          pa = &a[0];
          pb = &b[0];
          pc = &c[0];

con este código me da el error:
error: invalid types 'char[int]' for array subscript
en esta parte:
Code:
while(c[n] != '\0')

ya no se como mas hacer esto me esta volviendo loco
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 727
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Por lo que veo estás usando la clase String, y no es C sino C++
Tu cadena sería readString, creo. Pero en C++ no te puedo ayudar mucho.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks | PandoraBox rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias igual por la ayuda, seguiré intentando y esperando la ayuda de alguien ...

 smiley-grin
Logged

Pages: [1]   Go Up
Jump to: