All problems are solved except for 1, it is in the function dubbelewoorden. This function is supposed to delete double words. Problem is it works but only for 1 word. Example if i type:be be be aaaa. The answer will be: Be be aaaa. I need to finish it before deadline at noon saturday-sunday, please help me!
Code:
// File: P5.cpp
// Tom Bruls
// 0719757
# include <stdio.h>
# include <string.h>
# include <ctype.h>
# define MAXLINE 256
void spatie(char * entered_line, int length);
void hoofdletter(char * entered_line);
void spelling(char * entered_line, int length3);
void dot(char * entered_line, int length);
void tom(char * entered_line, int length3);
void dubbelewoorden(char * entered_line, int length3);
void main (void)
{
char a;
char entered_line[MAXLINE + 1];
int length = 0;
int length3;
printf("--- Welcome to Tom's amazing spelling corrector ---\n\n");
printf("Type 'end' when finished.\n\n");
while (1)
{
printf("Type line:");
length = 0;
while ( ( a = getchar()) != '\n' && length < MAXLINE)
{
entered_line[length++] = a;
}
entered_line [length] = '\0';
if (strcmp(entered_line, "end") == 0)
{
printf(" Have a nice day!\n");
break;
}
else
{
spatie(entered_line, length);
length3 = strlen(entered_line);
tom(entered_line, length3);
spelling(entered_line, length3);
dubbelewoorden(entered_line, length3);
length = strlen(entered_line);
hoofdletter(entered_line);
dot(entered_line, length);
printf("Corrected:%s\n\n", entered_line);
}
}
}
void hoofdletter(char * entered_line)
{
entered_line [0] = toupper(entered_line[0]);
}
void spatie(char * entered_line, int length)
{
int i=0;
int j=0;
int z=0;
int u=0;
int k=0;
while (j<length-1) //meerdere spaties
{
if (isspace(entered_line[j]) && isspace(entered_line[j+1]))
{
u = j;
for(u+1;u<length;u++)
{
entered_line[u] = entered_line [u+1];
}
length = length -1;
}
else
{
j++;
}
}
entered_line [length] = '\0';
if (isspace(entered_line[0])) //spatie aan begin
{
for(i=0;i<length;i++)
{
entered_line [i] = entered_line[i+1];
}
length = length-1;
}
while (z<length-1) //spaties voor leesteken
{
if (isspace(entered_line[z]) && ispunct(entered_line[z+1]))
{
k = z;
for(k+1;k<length;k++)
{
entered_line[k] = entered_line [k+1];
}
length = length -1;
}
else
{
z++;
}
entered_line [length] = '\0';
}
if (isspace(entered_line[length-1]))
{
entered_line[length-1]= entered_line[length];
}
}
void dot(char * entered_line, int length)
{
if (ispunct(entered_line [length-1]))
{
}
else
{
entered_line [length] = '.';
entered_line [length+1] = '\0';
}
}
void spelling (char* entered_line, int length3)
{
int i=0;
int u=0;
while(u<length3)
{
for(i=u; (entered_line[i] != '\0') && (!isspace(entered_line[i]));i++)
{
;
}
entered_line[i] = '\0';
if(strcmpi(&entered_line[u], "teh") == 0)
{
strcpy(&entered_line[u], "the");
}
if(strcmpi(&entered_line[u], "adn") == 0)
{
strcpy(&entered_line[u], "and");
}
if(strcmpi(&entered_line[u], "si") == 0)
{
strcpy(&entered_line[u], "is");
}
if(strcmpi(&entered_line[u], "eb") == 0)
{
strcpy(&entered_line[u], "be");
}
entered_line[i] = ' ';
u=i+1;
}
entered_line[length3] = '\0';
}
void tom (char* entered_line, int length3)
{
int i=0;
int u=0;
int a;
while(u<length3)
{
for(i=u; (entered_line[i] != '\0') && (!isspace(entered_line[i]));i++)
{
;
}
entered_line[i] = '\0';
if(strcmpi(&entered_line[u],"tom") == 0)
{
strcpy(&entered_line[u], "TOM");
}
entered_line[i] = ' ';
u=i+1;
}
entered_line[length3] = '\0';
}
void dubbelewoorden (char* entered_line, int length3)
{
int i=0;
int u=0;
int k=0;
int f;
int z=0;
int length2;
while(u<length3)//length3 is goed nagekeken met breakpoint
{
for(i=u; (entered_line[i] != '\0') && (!isspace(entered_line[i]));i++)
{
;
}
entered_line[i] = '\0'; // eerste woord afgekapt
f = i;
for(k=i+1; (entered_line[k] != '\0') && (!isspace(entered_line[k]));k++)
{
;
}
entered_line[k] = '\0'; //tweede woord afgekapt
if(strcmpi(&entered_line[u],&entered_line[i+1]) == 0)
{
length2= strlen(&entered_line[u]); //lengte van woord + 0 karakter
for(u;u<length3 -1;u++)
{
entered_line[u] = entered_line [i+1]; //eerste letter van het tweede woord wordt naar de eerste letter van het eerste woord gekopieerd
i = i +1;
}
length3 = length3 - length2; //nieuwe lengte van de string
length3 = length3 -1;
}
entered_line[f]= ' '; //wordt weer spatie
u=f+1; //naar volgende woord
}
entered_line[length3]= '\0';
}