Buenas gente! este será mi primer post(pero no el último) les pido una mano con este ejercicio.
Me piden que luego de ingresar una cadena (puede tener mezcladas minusculas y mayusculas y mas de un espacio entre palabra y palabra) le haga los arreglos necesarios para:
-La primer palabra de la cadena debe estar en mayuscula.
-La primer palabra luego de un punto debe estar en mayuscula.
-La cadena debe finalizar con un punto (si ya lo tiene no hace falta que lo ponga)
He aquí mi "programa" que cumple todo menos con lo de agregar el punto al final (tengo que admitir que lo que hice fue bastaaaante cabeza de tacho y lo forcé, pero no es la idea:
JELPMEEE!!
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define p printf
#define s scanf
void oracion(char*, char*);
int main()
{
int N;
char *t1, *t2;
p("Ingrese la cantidad de caracteres de la oracion: ");
s("%d",&N);
t1=(char*) malloc((N+1)*sizeof(char));
t2=(char*) malloc((N+2)*sizeof(char));
if(t1==NULL || t2==NULL)
{
p("\n No hay suficiente memoria");
getch();
exit(1);
}
p("\n Ingrese la oracion: ");
fflush(stdin);
gets(t1);
oracion(t1,t2);
p("\n La oracion ingresada con los arreglos es: %s. ",t2);
free(t1);
free(t2);
getch();
}
void oracion (char *a, char *b)
{
int i=0;
while(*a)
{
while(*a==' ') a++;
while((*a) && *a!=' ' && *a!='.')
{
if(i==0)
{
if(*a>='a' && *a<='z') *b=*a-32;
else *b=*a;
}
else
{
if(*a>='A' && *a<='Z') *b=*a+32;
else *b=*a;
}
a++;
b++;
}
if(*a==' ')
{
i=1;
*b=*a;
a++;
b++;
}
else
{
i=0;
*b=*a;
b++;
*b=' ';
a++;
b++;
}
}
*a=*b;
b--;
*b='.';
}
Gracias!!