Autor Tema: Tutorial - Cadenas y arreglos de chars  (Leído 68914 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #60 en: 01 de Noviembre de 2009, 23:19:09 »
Que tal amigos!
AQui les coloco una pequeña modificacion que le hice a uno de los ejemplos de migsantiago y que podria servir como un metodo alternativo  :mrgreen:
En este ejemplo cuando se usa solo el nombre del string(cadena) este opera como un puntero al primer elemento de la cadena, luego colocandole un offset podemos mostrar el contenido de la cadena completa.  :mrgreen:

Código: [Seleccionar]
En ccs:
&cadena[i] = cadena + i    ;-)

Citar
#include <16F877a.h>
#use delay (CLOCK = 4000000)
#fuses XT,NOWDT,NOLVP

#use rs232 (baud=9600,xmit=pin_b6, rcv=pin_b7)


void main()
{
   char cadena[50]; //cada cadena tendrá 9 chars + 1 NULL = 10 chars
//primera palabra
sprintf(cadena,"perro");
//segunda
sprintf(cadena+10,"gato");
//tercera
sprintf(cadena+20,"ratón");
//cuarta
sprintf(cadena+30,"queso");
//quinta
sprintf(cadena+40,"leche");

printf("%s \n", cadena);
//segunda
printf("%s \n", cadena+10);
//tercera
printf("%s \n", cadena+20);
//cuarta
printf("%s \n", cadena+30);
//quinta
printf("%s \n", cadena+40);

while(1);


}




SAludos
« Última modificación: 02 de Noviembre de 2009, 04:19:49 por RALF2 »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #61 en: 02 de Noviembre de 2009, 00:30:30 »
Una preguntilla  :mrgreen:
Los ejemplos que van a colocar son tomando en cuenta el C o van a estar dirijidos al CCS?
Ya que hay cosas que como saben son validas en C y no en CCS.  :shock:

Saludos

Pues lo ideal es que los ejemplos sean para CCS porque mucha gente lo usa. Creo que el tutorial ya está completo, solo falta detallar las demás funciones de string.h pero una vez entendiendo lo básico de las cadenas esas funciones son fáciles de entender.

Desconectado Hebert

  • PIC10
  • *
  • Mensajes: 18
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #62 en: 15 de Febrero de 2011, 21:03:18 »
ola a todos mi pregunta es la siguiente

quiero separar una cadena de la siguiente forma por ejemplo

A1=12.36//donde el numero en este caso 12.36 el cual puede variar puede ser 1000  o cualquiera


la idea es quitar el "A1=" y trabajar con el numero almacenado en otra variable, para luego pasarlo a flotante o realizar calculos con el

Muxas gracias de antemano  y disculpen la ignorancia


Desconectado Hebert

  • PIC10
  • *
  • Mensajes: 18
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #63 en: 15 de Febrero de 2011, 21:05:18 »
se me olvidaba decir que trabajo con c30

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #64 en: 15 de Febrero de 2011, 21:45:47 »
Podes usar la función strncpy de las estándar de Strings. Algo de info:

http://www.google.com.ar/search?aq=f&sourceid=chrome&ie=UTF-8&q=strncpy


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #65 en: 15 de Febrero de 2011, 22:50:29 »
Si la cadena origen es "A1=12.36" entonces basta con que a la cadena destino la copies con un apuntador.

Código: [Seleccionar]
char *destino;

...

destino = origen+3;

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #66 en: 16 de Febrero de 2011, 02:45:14 »
Magnífico tutorial Santiago, muchas gracias

Desconectado Hebert

  • PIC10
  • *
  • Mensajes: 18
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #67 en: 16 de Febrero de 2011, 12:22:06 »
Muchas gracias por contestar  lo hice con el puntero y me resulto

ya me han salvado de hartas... pondre una dedicatoria en mi tesis para el foro :-/ :-/ :-/ :-/

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #68 en: 18 de Febrero de 2011, 03:11:12 »
Muy bueno lo de cadenas con punteros. Gracias

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #69 en: 18 de Febrero de 2011, 11:08:15 »
Magnífico tutorial Santiago, muchas gracias

Muy bueno lo de cadenas con punteros. Gracias

Gracias por leerlo. Saludos.

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #70 en: 21 de Agosto de 2011, 08:35:30 »
Hola a todos.
Estoy practicando con este magnífico tutorial, una campo que quiero tener muy en claro..gracias migsantiago.
Como ejemplo estoy usando el strcmp de esta forma:

Código: [Seleccionar]
for(;;){
      unsigned char activar[]="*1234";
      unsigned char codigos[6];
      unsigned char i,c;

      while(estado==0x04){    //Hasta que no sea igual no seguimos
               for(i=0;i<5;i++){
               while(c==0);         //Hasta que no se oprima alguna tecla ..está por interrupción
               codigos[i]=c;
               c=0;                    //reiniciamos c
               }
               if(strcmp(codigos,activar)==0){         //Comparamos
                  lcd_putc("\fEs Igual");
                  delay_ms(1800);
                  estado=0x05;                 //Es igual , salimos
               }else{
                  lcd_putc("\fNo es Igual");
                  estado=0x04;}

Lo curioso es que anoche me funcionó bien, hoy le hice unos cambios al código en las lines sobre que hacer si es diferente, y resulta que compilo, 0.0 errores, 0 warnigs pero no me funciona, siempre dice que es diferente. Me puse a grabar la varible activar en la eeprom, usando la variable i dentro del for, y al leerla me muestra *1234; lo mismo hice con la variable codigos dandome bien...por lo que creo que debe ser un bug del CCS o cometo un error al comparar...alguna sugerencia, por favor. Estoy usando CCS 4.120 y el 18F2550

Saludos

PD...Me respondo: Mi error está en que la variable codigos no le agrego el caracter nulo al final, para que se sepa que se ha terminado la cadena, por lo tanto algún campo de la memoria tenía el "0" anoche y hoy pues ya no estaba :) por eso me confundió....busqué como agregarle el cero y ya en este mismo hilo, vamos cosas de despistes que me quitaron 2 horas :)..bueno aca la correción:

Código: [Seleccionar]
unsigned char codigos[6]="\0";


Gracias por enseñarme, señores.
////////////////////////////////////////////////////////////

Edición 2: No entiendo que pasa, pero ya no me funciona, sigo con el mismo problema, no da como resultado la igualdad, siempre es diferente, debo tener el problema en la formación de la cadena, realmente como se hace? no logro entender, si le sumo un espacio más a la cadena para que el compilador agregue el caracter nulo, por que no me funciona?
Ayuda por favor...
Gracias de antemano

////////////////////////////////////////////////////////////

Edición 3:Jajaja, de nuevo, solo funciona si a la variable codigos le agrego el cero(en caracter nulo) luego de la rutina for.. asi:

Código: [Seleccionar]
for(i=0;i<5;i++){
               while(c==0);         //Hasta que no se oprima alguna tecla ..está por interrupción
               codigos[i]=c;
               c=0;                    //reiniciamos c
               }
codigos[5]=0;

Existe una forma más elegante de no tener que hacer esto cada vez? o la puedo declarar al inicio del programa sin problemas? Gracias.


Saludos



« Última modificación: 21 de Agosto de 2011, 16:04:30 por marvicdigital »

Desconectado matyvico

  • PIC10
  • *
  • Mensajes: 20
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #71 en: 26 de Enero de 2013, 19:56:29 »
Quería agradecer por el magnífico tutorial, me la pasé varias horas (sino días) tratando de averiguar de donde venia el 'error' de no poder asignarle valores a una matriz char (en la que almaceno datos para un menú) una vez ya en la mitad del programa... Y eso pasa cuando en la facultad te dicen que estas programando en C (y en realidad es el C++) sumandose a eso algunas incongruencias o cositas raras que suele hacer el amigo CCS  :D

Pregunto: ¿Hay alguna forma mas correcta o elegante de hacer esto?:

Código: [Seleccionar]
char opc_menu[7][15]={"Estado","Tipo de onda","Amplitud","Frecuencia","Periodo","Duty cicle","Apagar"};
----------
char opc_onda[7][15]={"Rampa","Triangular","Cuadrada","Senoidal","Atras","",""};
for(i=0;i<=7;i++)
{
     strcpy(opc_menu[i],opc_onda[i]);
}
« Última modificación: 26 de Enero de 2013, 19:59:00 por matyvico »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #72 en: 26 de Enero de 2013, 22:23:30 »
Reemplazar el texto de un arreglo de char? No, con strcpy...También podes cargar directamente el string:

strcpy(opc_menu[0],"Rampa");


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado matyvico

  • PIC10
  • *
  • Mensajes: 20
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #73 en: 07 de Febrero de 2013, 17:38:33 »
Reemplazar el texto de un arreglo de char? No, con strcpy...También podes cargar directamente el string:

strcpy(opc_menu[0],"Rampa");


Saludos!

Claro, quiero reemplazar el texto que contiene un arreglo char (local) por el de otro arreglo char (global), a eso lo hice funcionar, pero por lo que estuve leyendo, solo es necesario el uso del strcpy() cuando se trata de arreglos char, es decir, si por ejemplo yo quiero asignar nuevos valores a un array numerico tipo int solo haciendo:

Código: [Seleccionar]
int i;
int mi_array[200]={};

for(i=0;i<=199;i++)
{
    mi_array[i]=2*sin(i);
}

Supongo que con eso bastaría para generar un array que tenga en cada uno de sus 200 elementos un calculo particular del seno (por ejemplo).

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #74 en: 07 de Febrero de 2013, 17:46:40 »
Chiste.

Otra forma de hacer ese calculo (2 seno(x)) es:

Conseguir 200 mujeres y ponerlas en linea una tras otra (deben ser de talle x)  :D :D :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.