Ayuda con cadenas.

Iniciado por User, 16 Julio 2012, 09:31 AM

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

User

Saludos a todos los lectores y miembros del foro, tengo una duda aunque para algunos es basica para mi es algo nuevo, intento aprender a programar C en linux y mi consulta es la siguiente :

Tengo las cadenas :

Hola como estas ?
Yo muy bien ?
Que bien!

Cual es la funcion que me permite extraer siempre la primera palabra usando como delimitador
el espacio en blanco ( Siendo el resultado : "Hola","Yo","Que"), o con algun otro caracter como delimitador, pero siempre extrayendo lo de la derecha .. gracias a quien pueda ayudarme, espero haberme dejado entender.


BlackZeroX

The Dark Shadow is my passion.

User

Muchas gracias por la respuesta BlackZeroX , pero creo que no me explique bien, lo que deseo no es un array, si no separar la primera palabra de cada frase de las demas palabras, y almacenar el resultado en 2 variables, espero se me haya entendido y gracias nuevamente :)

"Hola"                 "como estas ?"
  "Yo"                   "muy bien ?"

Algo asi es lo que deseo obtener

DickGumshoe

#3
O sea, tienes tres variables:

- Hola como estas ?
- Yo muy bien ?
- Que bien!


Y de ahí quieres sacar 6 variables:

Citar
- Hola
- como estas ?
- Yo
- muy bien ?
- Que
- bien!

Si es eso, no sé si hay alguna función que haga eso. Sin embargo puedes utilizar un bucle for, y en el momento que encuentres un espacio en una de las cadenas, haces lo siguiente:

1. Copias el carácter en otra cadena
2. Eliminas el carácter.
3. Se repite el bucle hasta llegar al final.

Saludos!

do-while

Cita de: User en 16 Julio 2012, 17:38 PM
Muchas gracias por la respuesta BlackZeroX , pero creo que no me explique bien, lo que deseo no es un array, si no separar la primera palabra de cada frase de las demas palabras, y almacenar el resultado en 2 variables, espero se me haya entendido y gracias nuevamente :)

"Hola"                 "como estas ?"
  "Yo"                   "muy bien ?"

Algo asi es lo que deseo obtener


Y eso es lo que haces (o puedes hacer) con strtok...

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

BlackZeroX

Cita de: User en 16 Julio 2012, 17:38 PM
Muchas gracias por la respuesta BlackZeroX , pero creo que no me explique bien, lo que deseo no es un array, si no separar la primera palabra de cada frase de las demas palabras, y almacenar el resultado en 2 variables, espero se me haya entendido y gracias nuevamente :)

Aun que sea lo has intentado?.

Dulces Lunas!¡.
The Dark Shadow is my passion.

User

BlackZeroX : No aun no lo hize, ando en el trabajo y aqui no tengo donde, lo hago llegando a casa y gracias por el pendiente, cuidate.

User

Hola a todos nuevamente ya pude resolver la duda que tenia, GRACIAS DE VERDAD A TODOS LOS QUE ME AYUDARON : BlackZeroX, do-while, DickGumshoe, aqui les dejo el modo como lo hize lo pongo para que si otra persona tenga la misma duda lo vea y de paso me revisen el codigo haber si se puede optimizar, tal vez no uso adecuadamente las variables ? .. como les dije soy nuevo haber como m quedo a opinion de ustedes


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

int main ()
{
  char str[] ="Hola como estas ?";
  char * pch;
  char * valor1;
  char * valor2;

  pch = strtok (str," "); // Empiezo a buscar la 1 coincidencia del espacio en blanco
  while (pch != NULL)
  {
    valor1 = (pch); // Aqui se almacena la 1 palabra de la frase separa por el espacio en blanco
    pch = strtok (NULL, ""); // Aqui ya no le pongo el espacio en blanco porque deseo el resto de la frase completa
    valor2 = (pch); // Almaceno el resto de la frase en la variable
    break; // Interrumpo el bucle pues como dije solo queria obtener la 1 palabra con el espacio como delimitador
  }

  printf ("Este es el 1 valor: %s\n", valor1);
  printf ("Este es el 2 valor: %s\n", valor2);
  return 0;
}



Bueno amigos creo que es todo, gracias !!!!!!!!!!!!

do-while

¡Buenas!

Asi esta bien, pero puedes hacerlo un poco menos complicado:

char cadena[UNA_CANTIDAD],*primera,*resto;

primera = strtok(cadena," ");

if(primera)
    resto = cadena + strlen(primera) + 1; //pasamos al siguiente caracter despues del primer espacio
else
    //no hay espacios en blanco


O si no estas familiarizado con la aritmetica de punteros, esta otra:

char cadena[UNA_CANTIDAD],*primera,*resto;

primera = strtok(cadena," ");

if(primera)
    resto = &cadena[strlen(primera) + 1]; //pasamos al siguiente caracter despues del primer espacio
else
    //no hay espacios en blanco


¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

User

do-while Gracias por responder nuevamente, proble el codigo y va muy bien hee, aqui mi interrogante :
Elegi el 2 ejemplo, porque no se acerca de las aritmeticas de punteros.


char cadena[UNA_CANTIDAD],*primera,*resto;

primera = strtok(cadena," "); // Quiere decir que en la variable primera se almacena siempre la primera palabra segun la condicion dada ?

if(primera) // Si hay un dato en en la variable primera es decir que por defecto suponemos que se obtiene el 1 valor ?
    resto = &cadena[strlen(primera) + 1]; //Aqui no me queda muy claro porque usas el strlen ? hasta donde se se usa para sacar la longitud de una palabra
printf ("%s\n", resto);
// Y lo del else lo omiti porque siempre se habra espacios en blanco esta bien ?