Gracias!

| |||
Cadenas en C/C++ Buenas a todos! Les comento: Desde que he comenzado a espíar un poquito sobre C y C++ me he encontrado con el eterno problema de las cadenas. Yo vengo de lenguajes de alto nivel, en el cual con un simple cadena = "Hola mundo como andan?" ya basta para conformar una variable con ese valor sin tener que indicar el número de caracteres ni nada por el estilo. Yo creo que es por esto mismo mi tal complicación, no? Bueno, el tema es el siguiente: He buscado por todos lados pero no he podido encontrar un ejemplo concreto el cual me sirva a mi para entender como hacer para almacenar en una variable una cadena con X cantidad de caracteres, pues, que yo no tenga que indicar el número de caracteres de la cadena. Mejor dicho, si indicarlo, pero saberlo previamente o algún metodo de esos. He visto sobre la función malloc() pero no he podido resolver nada aún. Creo que no es muy complicado lo que pido, un ejemplo concreto sobre cómo añadir una frase con X caracteres a una variable. Gracias! ![]() |
| |||
Respuesta: Cadenas en C/C++ Hola carbon! nose si entendi muy bien lo que queres pero bueno te dejo mi respuesta... Los arreglos se pueden asignar directamente con una frase, palabra, etc de la siguiente manera:
Código C:
De esta manera le asignamos a arr la cadena sin necesidad de especificar el tamaño del arreglo.Ver original Tambien se puede utilizar punteros, ej:
Código C:
Ver original Espero te sirva, saludos |
| |||
Respuesta: Cadenas en C/C++ Si te decides por C++, puedes usar la clase string para almacenar cadenas de caracteres. Referencias y ejemplos: http://www.cplusplus.com/reference/string/string/ |
| |||
Respuesta: Cadenas en C/C++ Cita: Ah! Pense que siempre habia que indicar la cant. de caracteres
Iniciado por cesar_casla ![]() Hola carbon! nose si entendi muy bien lo que queres pero bueno te dejo mi respuesta... Los arreglos se pueden asignar directamente con una frase, palabra, etc de la siguiente manera:
Código C:
De esta manera le asignamos a arr la cadena sin necesidad de especificar el tamaño del arreglo.Ver original Tambien se puede utilizar punteros, ej:
Código C:
Ver original Espero te sirva, saludos ![]() Cita: Gracias! Me sirve :D
Iniciado por sam90 ![]() Si te decides por C++, puedes usar la clase string para almacenar cadenas de caracteres. Referencias y ejemplos: http://www.cplusplus.com/reference/string/string/ ![]() |
| |||
Respuesta: Cadenas en C/C++ Las cadenas staticas no hace falta que indiques la cantidad de caracteres. Pero si quieres que el usuario ingrese una cadena deberres indicarla o usar malloc para reservarla. Sino puedes usar la clase string como te indique antes. |
| |||
Respuesta: Cadenas en C/C++ Ah, y en caso de utilizar la clase strin en C++, que funcion debería utilizar? |
| |||
Respuesta: Cadenas en C/C++ En la pagina que te pase estan los ejemplos:
Código C++:
Ver original |
| ||||
Respuesta: Cadenas en C/C++ Cita: Perdón por interrumpir en este post para preguntar, pero acabo de leer algo que me generó dudas (acabo de empezar con c++ y su sintax no la acabo de pillar) pero tenía pensado que los punteros era como una forma abreviada de referirse a una variable (quizás estea muy equivocado y no sea así, es lo más probable), pero puedo observar que "cesar_casla" pone una cadena en un puntero, ¿como es eso posible? a donde apunta ese puntero si ni siquiera lo declaro antes.
Iniciado por cesar_casla ![]() [...] Tambien se puede utilizar punteros, ej:
Código C:
[...]Ver original Gracias y disculpen la irrupción en el post. |
| |||
Respuesta: Cadenas en C/C++ Hola kurekshikam! no entiendo bien cuando decis "tenía pensado que los punteros era como una forma abreviada de referirse a una variable". En mi primera respuesta me olvide de aclarar que todo lo que dije era con respecto a C y no C++, ya que si no me equivoco en C++ existe el tipo de dato string Un puntero en C es una variable q contiene una direccion de memoria. En el ejemplo que di la declaracion del puntero seria: char *p y a donde apunta seria ="hola soy una cadena"
Código C:
Ver original Espero haya aclarado tus dudas sino segui preguntando Saludos |
| |||
Respuesta: Cadenas en C/C++ Los punteros son una variable de 32 bits (o 64) que almacenan una direccion de memoria. En esa direccion estan los datos que nos interesa. Cuando definimos Char * p = "Hola mundo"; El compilador lo que hace es alamacenar "Hola mundo" en la parte statica de la memoria y declara un puntero p que tiene la direccion de memoria de esa parte statica (Al primer caracter de la cadena, osea, "H"). Ahora lo que tienes que entender que tambien se puede aplicar aritmetica de direcciones de memoria. Es por eso que si yo a p le sumo uno obtengo el siguiente caracter. Una forma abreviada de hacer eso es usar los corchetes, de la sigueinte manera: p[1] == 'o' y p[2] == 'l' p[1] es lo mismo que hacer *(p+1) pero creo que con esto te la estoy complicando mucho.... Ahora otra cosa para que tengas en cuenta. Cuando declaramos un array de esta forma: char a[10]; El compilador hace algo muy distinto a lo que hace con la variable p, aunque la variable a sigue siendo un puntero. De esta nueva forma el compilador reserva el espacio en memoria (si es dentro de una funcion en la memoria local) pero esta vez el puntero a no existe en memoria. Solo existe para el compilador. A la hora de enlazar traduce cada aparicion de a por su direccion... No se si se alla entendido pero te muetro un ejemplo con lo que se puede hacer y que no se puede hacer con las dos declaraciones:
Código C:
Ver original Trate de ser lo mas entendible posible.. cualquier cosa segui preguntando...estoy seguro que estoy generando nuevas dudas porque me parece que me puse un poco tecnico... pero me parece un tema mas que importante si se quiere aprender de verdad C/C++. Saludos |
| ||||
Respuesta: Cadenas en C/C++ Gracias a ambos... ya veo que me equivocaba con los punteros, aún me falta mucho para entender C++ Entonces así por lo breve, un puntero apunta hacia un espacio en la memoria y reserva un ese espacio en la memoria de un tamaño "x" por defecto y en ese espacio el usuario puede meter lo que quiera. Mientras que si declaro una variable el programa va a reservar el espacio "y" que yo le diga, es decir, que si le digo que el array tiene 10 caracteres va a reservarme el espacio suficiente y necesario para ese array de ese tamaño (ni un caracter más ni uno menos)... lo entendí bien? Por otro lado, un puntero reserva un tamaño en la memoria, por lo que su longitud es finita, por lo que me salta una duda, ¿cual es su límite? (me refiero a cuanto dato es capaz de almacenar, ya sean en caracteres o en número). Y algo que me acabo de fijar, si un puntero reserva una memoria de 32 bits (es decir 4 octetos o bytes, lo que sería lo mismo que ocupa una direccion ip, es decir, cuatro números en decimal limitados por 255, espero que se entienda esto...) ¿como es posible que pueda memorizar la cadena "Hola mundo"?, ya de por si, asignando una letra por byte mediante ASCII y aún no hay memoria suficiente para guardar todas las letras. Y último espero no molestar más, cuando defino:
Código C++:
Por que no puedo despues hacer directamente.Ver original
Código C++:
Y para hacerlo bien tengo que introducir letra a letra en la correspondiente posición. No hay forma humana de introducirlo todo al mismo tiempo?? y para mostrar el array tambien tendría que mostrarlo letra a letra??Ver original Gracias por sus respuestas de todas formas los punteros van quedando más o menos claros. ![]() |
| |||
Respuesta: Cadenas en C/C++ Veo que no entendiste casi nada de lo que dije.... un puntero lo unico que tiene es una direccion. Es como si yo te doy un papelito con la direccion de mi casa. No te estoy dando mi casa en el papelito solo te estoy dando la direccion, es decir, una ruta como llegar a mi casa. Vos sabiendo la direccion de mi casa sos capaz de hacer muchas cosas. Sabes como llegar, me podes enviar una carta, etc. Ahora volviendo a los punteros, este simplemente tiene la direccion donde se alojan los datos. Teniendo esa direccion uno es capaz de modificar o leer esos datos. Ahora lo siguiente, un puntero , al igual que mi papelito, solo apunta a un dato . Si me quiero correr a la casa sigueinte o al caracter siguiente tengo que sumarle uno a la direccion. Eso se logra cuando ahcemos a[1]..a[2] a[3] etc... Ahora porque no puedes hacer esto char a[5]; a = "Hola"; Porque C/C++ son lenguajes de bajo nivel, cada uno administra su memoria. Eso lo que tiene de interesante C/C++ contra otras lenguajes. Pero obviamente al principio no te va a gustar nada eso. Para copiar una cadena puede usar lo siguiente. strcpy(a,"Hola"); Esta funcion internamente copia uno a uno cada caracter mediante un for. Saludos |
Etiquetas: |