Autor
|
Tema: Ayuda con programa (Leído 3,803 veces)
|
Cas980
Desconectado
Mensajes: 6
|
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 #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
Mensajes: 42
|
#include <iostream> #include <stdio.h> #include <conio.h> using namespace std; void mi_strtok(char *frase); int main(void) { char frase[100]; cout<<"Ingrese la frase: "; gets(frase); mi_strtok(frase); getch(); return 0; } void mi_strtok(char *frase) { int i; for(i=0; frase[i]!='\0';i++) { if(frase[i]==' '){ cout<<"\n"; continue; //Saltar a la sgte iteración para que no imprima el espacio. } cout<<frase[i]; } }
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
Mensajes: 1.211
|
Que manía tienen los profesores de mezclar C y C++. Yo cambiaría: cout<<"\n";
Por: cout<<endl;
Ya que con endl se refresca el flujo de salida además.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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: .............. #include <conio.h> <== No aconsejable por no ser estándar #include <stdio.h> <== Sobraría usando cin.getline ........................... gets(frase); <== No aconsejable, en su lugar, por ejemplo, usaría la que sigue cin.getline(frase, 100, '\n'); ..................... getch(); <== No aconsejable por no ser estándar
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
milx86
Desconectado
Mensajes: 42
|
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 Por no hablar de librerías innecesarias con el uso de funciones no recomendadas: #include <conio.h> <== No aconsejable por no ser estándar
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
Mensajes: 1.211
|
Para eso tienes el cin.get()
Que además es estándar.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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
|
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
#include <stdlib.h> #include <stdio.h> #include <ctype.h> void mi_strtok( char *frase ); int main( ) { char frase[101]; printf("Intro frase: "); fflush( stdout ); fgets(frase, 101, stdin); mi_strtok( frase ); putchar('\n'); return 0; } void mi_strtok( char *frase ) { int i; char c; i = 0; while ( ( c = frase[i++] ) != '\0' ) { if ( !isspace(c) ) putchar(c); else putchar('\n'); } }
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
La función original no escribe en la pantalla , sino que "fragmenta" una cadena en varios trozos. Presento la mía que hace lo mismito que la strtok: #include <stdlib.h> #include <stdio.h> #include <ctype.h> char* mi_strtok( char *frase,const char* delim); char coincidencia(const char letra,const char* diccionario,const int tam); int main( ) { char frase[101]; printf("Intro frase: "); fflush( stdout ); fgets(frase, 101, stdin); char* s; if ( ( s = mi_strtok( frase, ",") ) != NULL ) printf( "%s\n", s ); while ( ( s = mi_strtok( NULL, ",") ) != NULL ) printf( "%s\n", s ); return 0; } char* mi_strtok( char *frase,const char*delim ) { static char* frase_actual = NULL; char* principio; if (frase != NULL) { frase_actual = frase; } else if (frase_actual == NULL) return NULL; principio = frase_actual; const int tam = strlen(delim); char c; while ( ( c = *frase_actual ) != '\0' ) { if (coincidencia(c,delim,tam)) { *frase_actual = '\0'; frase_actual++; return principio; } frase_actual++; } frase_actual = NULL; return principio; } char coincidencia(const char letra,const char* diccionario,const int tam) { int i = 0; for (; i < tam;i++) { if (letra == diccionario[i]) return 1; } return 0; }
La entrada: "1,2,3,4" me genera: 1 2 3 4
|
|
« Última modificación: 15 Marzo 2014, 22:58 pm por amchacon »
|
En línea
|
|
|
|
Yoel Alejandro
|
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
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
AYUDA CON PROGRAMA
Diseño Gráfico
|
Luisango
|
1
|
2,467
|
17 Abril 2005, 13:25 pm
por Sub_Cero
|
|
|
ayuda con mi programa
Programación Visual Basic
|
nitrox
|
2
|
2,369
|
31 Julio 2005, 00:48 am
por Slasher-K
|
|
|
ayuda programa!!
Programación C/C++
|
rodrigo_103
|
4
|
3,386
|
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
|
8 Diciembre 2013, 01:51 am
por Eleкtro
|
|