Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mapers en 8 Julio 2010, 04:24 am



Título: copiar caracteres en una cadena
Publicado por: mapers en 8 Julio 2010, 04:24 am
hola gente quisiera que me digan de que manera podria copiar caracteres en una cadena por ejemlo quiero copiara la letra "a" en una cadena ....

strncpy(Arreglo[i++],"a",1)----->seria de esta forma o de que manera para copiar la a dentro del arreglo...gracias de antemano 


Título: Re: copiar caracteres en una cadena
Publicado por: nicolas_cof en 8 Julio 2010, 04:28 am
mapers, te dejo un link que te puede servir...

http://c.conclase.net/librerias/?ansifun=strncpy

Salu10.


Título: Re: copiar caracteres en una cadena
Publicado por: @synthesize en 8 Julio 2010, 06:25 am
Código
  1. strncpy(arreglo[celda],"a",1)

Así mismo, no varía mucho de lo que tu escribiste.

E intenta poner códigos completos, para comprender mejor lo que deseas hacer.


Título: Re: copiar caracteres en una cadena
Publicado por: mapers en 8 Julio 2010, 06:46 am
lo que quiero hacer es copiar el caracter a 100 veces en el arreglo de esa manera


Código
  1. for(i=0;i<100;i++)
  2. {
  3. strncpy(Arreglo[j++],"a",1);
  4.  
  5. }
  6.  


Título: Re: copiar caracteres en una cadena
Publicado por: @synthesize en 8 Julio 2010, 06:50 am
100 veces en una celda o 1 vez en 100 celdas? Especifica xD

Para lo 2º:
Código
  1. for ( cont=0 ; cont<100 ; cont++ )
  2. {
  3.    strncpy (vector[cont], "a", 1);
  4. }


Título: Re: copiar caracteres en una cadena
Publicado por: mapers en 8 Julio 2010, 06:52 am
1 ves en 100 celdas


Título: Re: copiar caracteres en una cadena
Publicado por: @synthesize en 8 Julio 2010, 06:55 am
1 ves en 100 celdas

Ya te he dejado el code arriba  :xD

También lo puedes hacer sin strncpy

Código
  1.  
  2. for ( cont =0 ; cont <100 ; cont++ )
  3. {
  4.    vector[cont] = num;
  5. }
  6.  
  7.  

Aun que esto es para enteros claro


Título: Re: copiar caracteres en una cadena
Publicado por: Littlehorse en 8 Julio 2010, 06:58 am
 :o.

Que se supone que es "arreglo"? es una matriz o un vector? ten en cuenta que el primer parámetro de strncpy es char*. Si "arreglo" es una cadena, haciendo arreglo[cont] estas refiriéndote a un char.

Código
  1. for(int i=0;i<MAX;i++)
  2.     arreglo[i]='a';

Lean sobre manejo de cadenas.

Saludos


Título: Re: copiar caracteres en una cadena
Publicado por: @synthesize en 8 Julio 2010, 07:09 am
:o.

Que se supone que es "arreglo"? es una matriz o un vector? ten en cuenta que el primer parámetro de strncpy es char*. Si "arreglo" es una cadena, haciendo arreglo[cont] estas refiriéndote a un char.

Código
  1. for(int i=0;i<MAX;i++)
  2.     arreglo[i]='a';

Lean sobre manejo de cadenas.

Saludos

No se si asignar directamente un carácter a una cadena es buena práctica, pero a mi en clase (Con borland c++ 3.1) me ha dado problemas, por eso siempre acababa usando strncpy.. (Es cosa del compilador?


Título: Re: copiar caracteres en una cadena
Publicado por: Littlehorse en 8 Julio 2010, 07:23 am
Es que de la forma que planteaste es imposible usar strncpy, porque le pasas un char como parámetro cuando el esperado es char*.

No hay ningún problema en asignar caracteres de esa forma, porque haciendo "arreglo[i]" te referís a una posición del vector, no a toda la cadena.

La única forma de usar strcpy como plantean es que "arreglo" sea un arreglo de punteros, pero según veo no es el caso.

Suponiendo que "arreglo" es una cadena (char[]), la única forma de usar strcpy junto con la sintaxis de arreglos, es pasando la dirección de memoria de dicha posicion. Algo así:

Código
  1. strcpy(&array[5],"a");

Con lo cual strcpy comenzaría a copiar desde la posición expuesta. En este caso no tiene mucho sentido hacer algo así, ya que asignar caracteres a posiciones de un vector es perfectamente valido. Lo que es invalido es asignar dos cadenas (char[], por lo menos en C, no sucede lo mismo con strings en C++/STL).

Saludos


Título: Re: copiar caracteres en una cadena
Publicado por: @synthesize en 8 Julio 2010, 07:30 am
Gracias por responder, ya he visto claro mi error, fantástico como siempre lh.

Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int cont;
  6. char vector[5];
  7. for ( cont=0 ; cont<5 ; cont++ )
  8. {
  9.     vector[cont] = 'a';
  10. }
  11.  
  12. printf("%s\n", vector);
  13. return 0;
  14. }


Título: Re: copiar caracteres en una cadena
Publicado por: mapers en 8 Julio 2010, 07:37 am
gente y si quiero por ejemplo dar una cadena de 3 caracteres y que los permute por ejemplo :
mar
mmaarr
mmmaaarrr

y asi sucesivamente seria algo asi
Código
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.    char arreglo [1000];
  9.    char arreglo1[1000];
  10.    char arreglo2[1000];
  11.    char arreglo3[1000];
  12.    int cont,k;
  13.  
  14.    cout<<"INGRESE VALOR A GENERAR"<<endl;
  15.    cin>>k;
  16.    cout<<"INGRESE CADENA A EVALUAR"<<endl;
  17.    cin>>arreglo;
  18.                 for ( cont=0 ; cont<k ; cont++ )
  19.                 {
  20.                    arreglo1[cont]=arreglo[0];
  21.                    arreglo2[cont]=arreglo[1];
  22.                    arreglo3[cont]=arreglo[2];
  23.                    cout<<arreglo1<<arreglo2<<arreglo3<<endl;
  24.  
  25.                 }
  26.  
  27.  
  28.    system("PAUSE");
  29.    return EXIT_SUCCESS;
  30. }
  31.  
  32.  

pero no se lo que pasa cuando ingreso por ejemplo en el k =10 e ingreso la palabra mar esto sale :
mar
mmaarrU
mmmaaarrr
mmmmàáâã($>aaaaÔ÷"rrrrV
mmmmmáâã($>aaaaa÷"rrrrr
mmmmmmâã($>aaaaaa"rrrrrrW
mmmmmmmã($>aaaaaaarrrrrrr
mmmmmmmm($>aaaaaaaarrrrrrrrX
mmmmmmmmm$>aaaaaaaaarrrrrrrrr
mmmmmmmmmm>aaaaaaaaaarrrrrrrrrrY


me salen otros caracteres a que se deve gracias de antemano por  todo ....
 


Título: Re: copiar caracteres en una cadena
Publicado por: leogtz en 8 Julio 2010, 07:45 am
O pudiera usarse esto:

Código
  1. char vector[100];
  2.    memset(vector, 'a', sizeof(vector));
  3.    for(unsigned int i = 0; i < 100; i++)
  4.    std::cout << vector[i] << std::endl;


Título: Re: copiar caracteres en una cadena
Publicado por: mapers en 8 Julio 2010, 07:47 am
pero en mi funcion que cree porque me bota otros caracteres que no son ?????


Título: Re: copiar caracteres en una cadena
Publicado por: do-while en 8 Julio 2010, 09:12 am
¡Buenas!

A ver, si tu funcion te da caracteres extraños es por que tu cadena tiene carateres extraños. Estudia sobre cadenas, porque se te olvida un dato muy importante, saber como delimitar la infrmacion que contiene una cadena. En ningun punto de tu programa estas indicando donde termina ninguna de las cadenas que vas a imprimir.

En lugar de un bucle, o de intentar asignar valores individuales por medio de un bucle, ya que esto termina ralentizando el programa, puedes usar tambien la funcion memset (http://c.conclase.net/librerias/index.php?ansifun=memset#inicio). Que viene con la libreria estandar de C, en string.h, y esta optimizada para llevar a cabo el trabajo que quieres. Echale un vistazo a la libreria estandar (http://c.conclase.net/librerias/index.php), veras que tienes muchas funciones utiles (aunque cuidado, tambien las hay inutiles e incluso peligrosas por su falta de seguridad).

¡Saludos!


Título: Re: copiar caracteres en una cadena
Publicado por: mapers en 8 Julio 2010, 21:38 pm
entonces que le falta a mi programa para que no me salgan esos valores que yo no  considero ...............


Título: Re: copiar caracteres en una cadena
Publicado por: MIG80 en 8 Julio 2010, 22:09 pm
 Que raro, no el código no parece tener errores.


Título: Re: copiar caracteres en una cadena
Publicado por: mapers en 8 Julio 2010, 22:14 pm
pero si arreglo es de 100 como lo va a sobrepasar men !!


Título: Re: copiar caracteres en una cadena
Publicado por: MIG80 en 8 Julio 2010, 22:18 pm
Si, si. Edite mi respuesta anterior porque me di cuenta de mi error. Bueno, se te olvido finalizar las cadenas de caracteres. Antes del cout debes poner la marca de fin de cadena ('\0') en los arreglos 'arreglo1', 'arreglo2' y 'arreglo3':

Código:
...
arreglo1[cont+1]=arreglo2[cont+1]=arreglo3[cont+1]='\0';
cout<<arreglo1<<arreglo2<<arreglo3<<endl;
...

PD: No grites y aprende a decir gracias.

Saludos.


Título: Re: copiar caracteres en una cadena
Publicado por: do-while en 9 Julio 2010, 00:15 am
¡Buenas!

Hombre... no se lo des todo mascadito porque asi el chaval no aprende a investigar... imagina que un dia se levanta sin internet y que no tiene ningun tutorial ni apunte ni libro, porque cada vez que no sabe algo viene aqui y en lugar de decirle lo que tiene que buscar, mirar o investigar se lo damos todo hecho. En ese momento dejara de aprender, porque como no se lo podremos decir y no tendra material no pegara un palo al agua...

¡Saludos!


Título: Re: copiar caracteres en una cadena
Publicado por: MIG80 en 9 Julio 2010, 01:33 am

Si pues... tienes mucha razón do-while.

Saludos.


Título: Re: copiar caracteres en una cadena
Publicado por: nicolas_cof en 9 Julio 2010, 03:08 am
mapers, ya se te ha sugerido en varias oportunidades que leas, ya que muchos coinciden en que tenes muchos conceptos errados y no muy claros.

Acordate que los libros no muerden, al menos por ahora
(http://4.bp.blogspot.com/__7LB7PqxV68/Sb43ugmZJcI/AAAAAAAAB_E/n3xiA3J4hM8/s400/librosnomuerden.jpg)

Nota: espero que no te lo tomes a mal ;)

Salu10.


Título: Re: copiar caracteres en una cadena
Publicado por: mapers en 9 Julio 2010, 05:15 am
oks  tienes razon gracias por todo  .....gracias por su ayuda  me voy a leer como me dijeron