Hi,
My assignment is on this website http://k4shif.netfirms.com/review.html
I have written the code, exactly like the pseudo code provided, and is heavily commented with my thought process....but for some reason it does not do its job....i am posting the code, any help will be greatly appreciated coz this is due tomm...once again thanks
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
void translateline(char [], char []);
int extractintoew(char [], char [],int);
void convertintopig(char [], char [] );
int wherevowel(char []);
int copyintopl(char [], char [],int);
int main()
{
char el[100]={'\0'},pl[200]={'\0'};
int a=0;
printf("Please enter a line(# to end): ");
gets(el);
while(el[0]!='#')
{
translateline(el,pl);
puts(pl);
printf("\nPlease enter a line(# to end): ");
fflush(stdin);
gets(el);
}
printf("Good Bye. Oodgay Ebyay\n");
system("PAUSE");
return 0;
}
void translateline(char el[], char pl[])
{
char ew[17]={'\0'},pw[17]={'\0'};
int ep=0,pp=0,k=0,r;
while(el[ep]!='\0')
{
if(isalpha(el[ep]))
{
k=extractintoew(el,ew,ep);
ep+=k;//this is to keep everything at par, so even here, one behind space or punct
convertintopig(ew,pw);//copies the contents of pw into pl, pp at this point is still 0
r=copyintopl(pw,pl,pp);//this will return the value of pp, as to where it is in pl so that we can put the punct or space
pp+=r;//now pp is set at before that point
pp--;//now it is set for pp++
pp++;//now ready to accept punct or space position
ep++;//now at punct or space position
}
else
{
if(isspace(el[ep]))
{
el[ep]=pl[pp];
}
else
{
el[ep]=pl[pp];
strcat(pl," ");//after punctuation put a space
}
}
}
pl[pp]='\0';//setting the last value to null as this is required by the output function
}//complete
int extractintoew(char el[],char ew[],int ep)
{
int i=0;
while(isalpha(el[i]))
{
ew[i]=el[ep];
i++;
ep++;
}
return ep;//ep at this point is one place behind the space or punctuation and returns that number to
}//completed
void convertintopig(char ew[], char pw[])
{
int y,m;
y=wherevowel(ew);//incomplete at this point
if(y==0||y==(-1))//this indicates if it begins with a vowel, or has no vowel at all
{
strcat(ew,"way");
strcpy(pw,ew);
}
else
{
m=strlen(ew);//calculate the length of the string;
memmove(ew,&ew[y],m-y);// m-y indicates that number of alphabets to move
strcat(ew,"ay");
strcpy(pw,ew);//now pw, has the word with the vowels moved back, and truncated with "ay"
}
}//completed
int wherevowel(char ew[])
{
int j;
char *vowel="aeiou";
if(ew[0]=='a'||ew[0]=='e'||ew[0]=='i'||ew[0]=='o'||ew[0]=='u')
{
j=0;
return j;
}
if(ew[0]=='A'||ew[0]=='E'||ew[0]=='I'||ew[0]=='O'||ew[0]=='U')
{
j=0;
return j;
}
else
{
j=strcspn(ew,vowel);
if(j==0)
{
j=(-1);
return j;
}
else return j;//this value here has the place where j occurs
}
}//completed
int copyintopl(char pw[], char pl[], int pp)
{
int a=0;
int b;//declared for strlen of pl
b=strlen(pw);
while(a<b-1)
{
pw[a]=pl[pp];
a++;
pp++;
}
return pp;
}//completed