[ Foro de C ]

Ayuda en este codigo C porfavor :( - Convertir palabras a plural

15-Feb-2015 21:24
Jose Bs.
1 Respuestas

Buenas con todos me podrian ayudar porfavor en este codigo no se tengo un error pero no se cual es :( si me ayudarian corrigiendo les agradeceria mucho.

Escriba un programa que dado el archivo redacción.txt, el cual contiene palabras en inglés, genera el archivo corregido.txt con su respectivo plural.
Para formar el plural se han definido las siguientes reglas:
- Si la palabra termina en ?y?, remueva ?y? y agregue ?ies?. Por ejemplo: baby quedaría convertido en babies
- Si la palabra termina en ?s?, ?x?, ?ch? o ?sh? añada ?es?. Por ejemplo: box quedaría convertido en boxes.
- Para todos los demás agregue ?s?


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

void CorregirPalabras(FILE *p, char *cadena);

void main()
{
char nombre[30]="";

FILE *ptrentrada,*ptrsalida;

if ((ptrentrada = fopen("redaccion.txt","r"))==NULL)
printf("El archivo no puede abrirse\n");
else
{
ptrsalida=fopen("corregido.txt","w+");
while (!feof(ptrentrada))
{

fscanf(ptrentrada,"%s",nombre);

CorregirPalabras(ptrsalida,nombre);
nombre[0]='\0';
}
fclose(ptrentrada);
fclose(ptrsalida);
} 
}


void CorregirPalabras(FILE *p, char *cadena)
{
char palabras[50];
char cadena1[50]="sh";
char cadena2[50]="ch";
while (!feof(p)){
fscanf(p,"%[^\n]s\n",palabras);
if (strchr(palabras,'y')==palabras)
strcpy(cadena1,"ies");
else if((strchr(palabras,'s')==palabras) || (strchr(palabras,'x')==palabras) || (strstr(palabras,cadena1)==palabras) || (strstr(palabras,cadena2)==palabras))
strcpy(cadena2,"es");
else
strcpy(cadena,"s");
}

}




18-Feb-2015 01:08
Nacho Cabanes (+83)

Hay varios errores. Por ejemplo:

- Este puede que sea sólo de haber seleccionado parte del fuente al copiar y pegar, pero... falta la almohadilla en "include <stdio.h>"

- La función "CorregirPalabras" recibe un fichero cuyo nombre parece decir que es de "salida", pero lo usas para leer, no para escribir.

- La función "CorregirPalabras" no escribe nada en fichero, ni en pantalla, ni devuelve una cadena modificada.

- En la función "CorregirPalabras" usar "strcpy", que cambia por completo el valor de una cadena de texto, cuando lo que deberías hacer es añadir cosas como "es" al final. Para añadir deberías usar "strcat".

- Igualmente, en muchos casos tendrás que eliminar la última letra de la palabra antes de crear el plural. Para eso deberás obtener la subcadena del principio, con "strncpy".






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)