ayuda con un problema en c
Hola, ojala alguien me pueda ayudar, os paso el enunciado y hasta donde he llegado yo en codigo fuente, gracias:
P4. a) Cree una funci贸n a la cual se le pasar谩n tres argumentos: dos cadenas de caracteres llamadas palabra y frase, y un n煤mero
entero num. La funci贸n copiar谩 en la cadena palabra la palabra cuyo orden en la cadena frase est谩 indicado por num. De esta forma
si num vale 1 se copiar谩 la primera palabra de la frase, si num vale 4 se copiar谩 la cuarta, etc. En el caso de que no haya tantas
palabras en la frase como el valor de num, la funci贸n deber谩 de devolver NULL, y en otro caso la cadena palabra.
b) Usando la funci贸n anterior y la creada en el problema 1, cree una funci贸n que reciba una cadena, y elimine de ella aquellas
聯palabras聰 que puedan ser interpretadas como n煤meros enteros o decimales (use atoi y atof). Para ello la funci贸n recibir谩 dos
argumentos llamados destino y original, que ser谩n dos cadenas de caracteres, procesando la cadena original de la forma indicada y
escribiendo el resultado en la cadena destino. La funci贸n strcat le puede ser muy 煤til para implementar la funci贸n. Un ejemplo del
procesamiento de esta funci贸n puede ser el siguiente:
路 original: 聯A las 00.00 del 31 de Diciembre de 2006 nos comeremos las 12 uvas de la suerte聰.
路 copia: 聯A las del de Diciembre de nos comeremos las uvas de la suerte聰.
c) Escriba un programa que demuestre el funcionamiento de la funci贸n creada anteriormente
----y esto he hecho yo,ahi me quedo-------
#include <stdio.h>
#include <string.h>
#define MAX 80
void funcion(char[],char[],int);
void main(void){
char palabra[MAX],frase[MAX];
int num;
printf("Introduzca la frase: \n");
gets(frase);
printf("Ahora introduzca la posicion que ocupa la palabra a copiar: \n");
scanf("%d",&num);
funcion(palabra,frase,num);
getch();
}
void funcion(char palabra[MAX],char frase[MAX],int num){
int i,j,es=0,npalabras,maxesp;
for(i=0;frase[i]!=\'\0\';i++)
if(frase[i]==32)
es=es+1;
npalabras=es+1;
printf("%d espacios %d numero de palabras\n",es,npalabras);
if(num>npalabras)
printf("NULL");
else if(num==1){
for(i=0;frase[i]!=32;i++)
palabra[i]=frase[i];
palabra[i]=\'\0\';
for(i=0;palabra[i]!=\'\0\';i++)
printf("%c ",palabra[i]);
}else{
for(i=0;i<num;i++)
if(frase[i]==32)
pos=num-1;
for(i=0;frase[i]!=\'\0\';i++)
if(esp==1&&)
P4. a) Cree una funci贸n a la cual se le pasar谩n tres argumentos: dos cadenas de caracteres llamadas palabra y frase, y un n煤mero
entero num. La funci贸n copiar谩 en la cadena palabra la palabra cuyo orden en la cadena frase est谩 indicado por num. De esta forma
si num vale 1 se copiar谩 la primera palabra de la frase, si num vale 4 se copiar谩 la cuarta, etc. En el caso de que no haya tantas
palabras en la frase como el valor de num, la funci贸n deber谩 de devolver NULL, y en otro caso la cadena palabra.
b) Usando la funci贸n anterior y la creada en el problema 1, cree una funci贸n que reciba una cadena, y elimine de ella aquellas
聯palabras聰 que puedan ser interpretadas como n煤meros enteros o decimales (use atoi y atof). Para ello la funci贸n recibir谩 dos
argumentos llamados destino y original, que ser谩n dos cadenas de caracteres, procesando la cadena original de la forma indicada y
escribiendo el resultado en la cadena destino. La funci贸n strcat le puede ser muy 煤til para implementar la funci贸n. Un ejemplo del
procesamiento de esta funci贸n puede ser el siguiente:
路 original: 聯A las 00.00 del 31 de Diciembre de 2006 nos comeremos las 12 uvas de la suerte聰.
路 copia: 聯A las del de Diciembre de nos comeremos las uvas de la suerte聰.
c) Escriba un programa que demuestre el funcionamiento de la funci贸n creada anteriormente
----y esto he hecho yo,ahi me quedo-------
#include <stdio.h>
#include <string.h>
#define MAX 80
void funcion(char[],char[],int);
void main(void){
char palabra[MAX],frase[MAX];
int num;
printf("Introduzca la frase: \n");
gets(frase);
printf("Ahora introduzca la posicion que ocupa la palabra a copiar: \n");
scanf("%d",&num);
funcion(palabra,frase,num);
getch();
}
void funcion(char palabra[MAX],char frase[MAX],int num){
int i,j,es=0,npalabras,maxesp;
for(i=0;frase[i]!=\'\0\';i++)
if(frase[i]==32)
es=es+1;
npalabras=es+1;
printf("%d espacios %d numero de palabras\n",es,npalabras);
if(num>npalabras)
printf("NULL");
else if(num==1){
for(i=0;frase[i]!=32;i++)
palabra[i]=frase[i];
palabra[i]=\'\0\';
for(i=0;palabra[i]!=\'\0\';i++)
printf("%c ",palabra[i]);
}else{
for(i=0;i<num;i++)
if(frase[i]==32)
pos=num-1;
for(i=0;frase[i]!=\'\0\';i++)
if(esp==1&&)
ese problema, vamos unos parecido lo tuve yo en un exam final, pero ahora no te puedo decir8-)
Mirate la funcion strtok.
A esa funcion le pasas una cadena y un caracter y te devuelve la cadena original hasta que encuentra ese caracter...
Es decir que si le pasas como caracter un espacio y como cadena tu cadena puedes ir sacando las palabras de la frase una a una como churritos :-)
A esa funcion le pasas una cadena y un caracter y te devuelve la cadena original hasta que encuentra ese caracter...
Es decir que si le pasas como caracter un espacio y como cadena tu cadena puedes ir sacando las palabras de la frase una a una como churritos :-)
la funcion de mi problema recibe un entero, el cual me da la posicion de la palabra a copiar en la cadena palabra, con lo cual si me dijese copiar la 7陋 palabra de la cadena frase en la cadena palabra, tendria que ir contando espacios incrementado a un contador hasta num-1 para hayar el espacio desde donde tengo que empezar a copiar o algo asi???
Si recibes un 1 tienes q hacer un strtok con tu cadena y el espacio.
Si recibes un 2 tienes q hacer 1 strtok para kitar la primera palabra y otro strtok para conseguir la segunda. Total 2 strtok
Si recibes un 3 tienes q hacer 3 strtok
etc... etc...
eso es un for simplito desde 0 hasta < numero q recibes con un strtok en medio.
La ultima palabra q tienes al salir del for es la palabra q necesitas...
Si recibes un 2 tienes q hacer 1 strtok para kitar la primera palabra y otro strtok para conseguir la segunda. Total 2 strtok
Si recibes un 3 tienes q hacer 3 strtok
etc... etc...
eso es un for simplito desde 0 hasta < numero q recibes con un strtok en medio.
La ultima palabra q tienes al salir del for es la palabra q necesitas...