elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con programa  (Leído 3,803 veces)
Cas980

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Ayuda con programa
« en: 15 Marzo 2014, 06:03 am »

Necesito crear un programa que a partir de una frase la imprima por palabras pero sin usar la funcion strtok, tengo lo siguiente pero no logro que imprima. Espero me puedan ayudar.
Por ejemplo si la frase es "hoy es viernes"
debe imprimir:
hoy
es
viernes

Código:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;


int mi_strtok(char* frase)
{
     int cont = 0;
     int x,c=0;
    
     while(*frase++ != '\0')
     {
        if(*frase!= ' ')
          {  
                
               cont++;
              
            }
        else
            {
                for(x=c;x<cont;x++)
                {
                   cout<<frase[x];
                   }
                   c=c+cont;
                  
                
            }
            
        }
            
     return 0;
}

main()
{
     char frase[500];
     cout<<"Ingrese la frase: ";
     gets(frase);  
     mi_strtok(frase);
    
     getch();


En línea

milx86

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Ayuda con programa
« Respuesta #1 en: 15 Marzo 2014, 07:13 am »

Código
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. using namespace std;
  5. void mi_strtok(char *frase);
  6.  
  7. int main(void) {
  8.    char frase[100];
  9.    cout<<"Ingrese la frase: ";
  10.    gets(frase);
  11.    mi_strtok(frase);
  12.    getch();
  13.    return 0;
  14. }
  15.  
  16. void mi_strtok(char *frase)
  17. {
  18.    int i;
  19.     for(i=0; frase[i]!='\0';i++)
  20.     {
  21.         if(frase[i]==' '){
  22.             cout<<"\n";
  23.             continue; //Saltar a la sgte iteración para que no imprima el espacio.
  24.         }
  25.         cout<<frase[i];
  26.  
  27.     }
  28. }
Espero esto te sirva  :)


« Última modificación: 15 Marzo 2014, 07:27 am por free_c0de » En línea

La abstracción es la clave para lidiar con la complejidad.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda con programa
« Respuesta #2 en: 15 Marzo 2014, 12:14 pm »

Que manía tienen los profesores de mezclar C y C++.

Yo cambiaría:
Código
  1. cout<<"\n";

Por:
Código
  1. cout<<endl;

Ya que con endl se refresca el flujo de salida además.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con programa
« Respuesta #3 en: 15 Marzo 2014, 14:43 pm »

Que manía tienen los profesores de mezclar C y C++.
....................................

Por no hablar de librerías innecesarias con el uso de funciones no recomendadas:

Código
  1. ..............
  2. #include <conio.h> <== No aconsejable por no ser estándar
  3. #include <stdio.h> <== Sobraría usando cin.getline
  4. ...........................
  5. gets(frase); <== No aconsejable, en su lugar, por ejemplo, usaría la que sigue
  6. cin.getline(frase, 100, '\n');
  7. .....................
  8. getch(); <== No aconsejable por no ser estándar
  9.  
  10.  

¡¡¡¡ Saluditos! ..... !!!!


En línea

milx86

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Ayuda con programa
« Respuesta #4 en: 15 Marzo 2014, 16:47 pm »

Que manía tienen los profesores de mezclar C y C++.
amchacon tienes razon, estoy iniciando la carrera de informatica y no puedo evitar el coraje cuando la maestra llama "C" a C++   :-( los consideran como iguales -.-
Y eso de "refrescar el flujo" no sabia, te agradezco :D

Por no hablar de librerías innecesarias con el uso de funciones no recomendadas:

Código
  1. #include <conio.h> <== No aconsejable por no ser estándar
  2.  

Seguro esta en windows, a mi me decian que le ponga el getch() para que no se me cierre el programa rapido :/
En línea

La abstracción es la clave para lidiar con la complejidad.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda con programa
« Respuesta #5 en: 15 Marzo 2014, 16:49 pm »

Para eso tienes el cin.get()

Que además es estándar.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con programa
« Respuesta #6 en: 15 Marzo 2014, 19:54 pm »

Y porfi, la próxima vez elige en GeSHi las etiquetas de C++ para que el código salga coloreado y sea más fácil de visualizar.

¡¡¡¡ Saluditos! ..... !!!!


« Última modificación: 15 Marzo 2014, 20:32 pm por leosansan » En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Ayuda con programa
« Respuesta #7 en: 15 Marzo 2014, 22:11 pm »

Aunque no queda mucho que aportar aquí, la idea fundamental es que si se haya espacio imprimir en su lugar un '\n', de otro modo imprimir el carácter normal. Se puede mejorar un poco usando isspace() (requiere <ctype.h>) para que dicho reemplazo ocurra no sólo con ' ', sino con cualquier carácter de espacio (tabulador, etc).

Presento mi versión enteramente en C. Usa un modo seguro de ingreso de datos usando fgets() (controla la cantidad de caracteres que se ingresan) y atendiendo a la recomendación de leosansan su usa la función estándar getchar() en lugar de getch(). Su salida:

Intro frase: Anita lava la tina
Anita
lava
la
tina


Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <ctype.h>
  4.  
  5. void mi_strtok( char *frase );
  6.  
  7. int main( ) {
  8.  
  9.   char frase[101];
  10.  
  11.   printf("Intro frase: ");
  12.   fflush( stdout );
  13.   fgets(frase, 101, stdin);
  14.  
  15.   mi_strtok( frase );
  16.  
  17.   putchar('\n');
  18.   return 0;
  19. }
  20.  
  21. void mi_strtok( char *frase ) {
  22.  
  23.   int i;
  24.   char c;
  25.  
  26.   i = 0;
  27.   while ( ( c = frase[i++] ) != '\0' ) {
  28.      if ( !isspace(c) )
  29.         putchar(c);
  30.      else
  31.         putchar('\n');
  32.   }
  33. }
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda con programa
« Respuesta #8 en: 15 Marzo 2014, 22:55 pm »

La función original no escribe en la pantalla ;D, sino que "fragmenta" una cadena en varios trozos.

Presento la mía que hace lo mismito que la strtok:
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <ctype.h>
  4.  
  5. char* mi_strtok( char *frase,const char* delim);
  6. char coincidencia(const char letra,const char* diccionario,const int tam);
  7.  
  8. int main( )
  9. {
  10.    char frase[101];
  11.  
  12.    printf("Intro frase: ");
  13.    fflush( stdout );
  14.    fgets(frase, 101, stdin);
  15.    char* s;
  16.  
  17.    if ( ( s = mi_strtok( frase, ",") ) != NULL )
  18.        printf( "%s\n", s );
  19.  
  20.    while ( ( s = mi_strtok( NULL, ",") ) != NULL )
  21.        printf( "%s\n", s );
  22.  
  23.    return 0;
  24. }
  25.  
  26. char* mi_strtok( char *frase,const char*delim )
  27. {
  28.    static char* frase_actual = NULL;
  29.    char* principio;
  30.  
  31.    if (frase != NULL)
  32.    {
  33.        frase_actual = frase;
  34.    }
  35.    else if (frase_actual == NULL) return NULL;
  36.  
  37.    principio = frase_actual;
  38.  
  39.    const int tam = strlen(delim);
  40.    char c;
  41.  
  42.    while ( ( c = *frase_actual ) != '\0' )
  43.    {
  44.        if (coincidencia(c,delim,tam))
  45.        {
  46.            *frase_actual = '\0';
  47.            frase_actual++;
  48.            return principio;
  49.        }
  50.  
  51.        frase_actual++;
  52.    }
  53.  
  54.    frase_actual = NULL;
  55.  
  56.    return principio;
  57. }
  58.  
  59. char coincidencia(const char letra,const char* diccionario,const int tam)
  60. {
  61.    int i = 0;
  62.    for (; i < tam;i++)
  63.    {
  64.        if (letra == diccionario[i]) return 1;
  65.    }
  66.    return 0;
  67. }
  68.  

La entrada: "1,2,3,4" me genera:
Citar
1
2
3
4
« Última modificación: 15 Marzo 2014, 22:58 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Ayuda con programa
« Respuesta #9 en: 15 Marzo 2014, 23:14 pm »

Casualmente hace unos días estaba pensando en cómo podría hacer un código que imitara la función estándar strtok() .... aunque al final no me senté a hacerlo.

Pero ya hoy obtuve la respuesta, y una solución hábil por cierto  ;D
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA CON PROGRAMA
Diseño Gráfico
Luisango 1 2,467 Último mensaje 17 Abril 2005, 13:25 pm
por Sub_Cero
ayuda con mi programa
Programación Visual Basic
nitrox 2 2,369 Último mensaje 31 Julio 2005, 00:48 am
por Slasher-K
ayuda programa!!
Programación C/C++
rodrigo_103 4 3,386 Último mensaje 16 Septiembre 2012, 21:58 pm
por rodrigo_103
[Ayuda] ¿Cómo ejecutar otro programa desde mi programa de C#?
.NET (C#, VB.NET, ASP)
Zodiak98 1 6,193 Último mensaje 8 Diciembre 2013, 01:51 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines