Question

I'm trying to finish my spell check project and am having a few issues. I'm trying to use strlen and strcmp to compare the words in the article and dictionary with each other, but the compiler tells me that the identifier "strlen" and "strcmp" are undefined. I'm not sure what to do here. Additionally, when I load char(article) into int ArticleLength, it tells me that I can't use int with char article. I'm very much a beginner and need some help. Here's my code so far.

#include <stdio.h> // provides declarations for printf and putchar
#include <stdint.h> // provides declarations for int32_t uint32_t and the other (new) standard C type
/* You must write this function (spellCheck). Do not change the way the function is declared (i.e., it has
 * exactly two parameters, each parameter is a standard (mundane) C string (see SpellCheck.pdf).
 * You are expected to use reasonable programming style. I *insist* that you indent 
 * reasonably and consistently in your code. I strongly encourage you to avoid big functions
 * (while there are always exceptions, a good rule of thumb is about 15 lines in a function).
 * So, plan on implementing spellCheck by writing two or three other "support functions" that
 * help make the actual spell checking easier for you.
 * There are no explicit restictions on using functions from the C standard library. However,
 * for this project you should avoid using functionality from the C++ standard libary. You will
 * almost certainly find it easiest to just write everything you need from scratch!
 */
void spellCheck(char article[], char dictionary[]){
int OneLetter(char c);
void MakeLower(char article[]);
void KillPunct(char article[]);
void LowerDictionary(char dictionary[]);
int ArticleLength(char article[]);
void ArticleNextWord(char article[], char ArticleWord[], int ArticleLength, char dictionary[]);
char ArticleWord[50];
char DictionaryWord[50];
//int ArticleLength = ArticleLength(article);
KillPunct(article);
MakeLower(article);
LowerDictionary(dictionary);
ArticleNextWord(article, ArticleWord, ArticleLength, dictionary);
int strncmp(char *ArticleWord, char *DictionaryWord, int n);
int main(void); {
    FILE *Dictionary;
    FILE *Article;
    int words_read;
    char* p;

    Dictionary = fopen("dictionary.txt", "r");
    if (Dictionary == 0) {
        printf("The Dictionary is Empty");
        return;
    }
    Article = fopen("article.txt", "r");
    if (Article == 0) {
        printf("The Article Has No Words");
        return;
    }
    p = dictionary;
    p = fgets(p, 100, Dictionary);
    while (p != 0) {
        while (*p != '\0') {
            p += 1;
        }
        p = fgets(p, 100, Dictionary);
    }
    p = article;
    words_read = fread(p, 1, 1000, Article);
    p += words_read;
    while (words_read != 0) {
        words_read = fread(p, 1, 1000, Article);
        p += words_read;
        }
    *p = 0;
    }
spellCheck(article, dictionary);


int ArticlePosition = 0;
int DictionaryPosition = 0;

void DictionaryNextWord(char dictionary[], char DictionaryWord[]) {
    int i;
    for (i = 0; dictionary[DictionaryPosition] != '\n'; i += 1) {
        DictionaryWord[i] = dictionary[DictionaryPosition];
        DictionaryPosition += 1;
    }
}
int OneLetter(char c){
    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
        return 1;
    return 0;
}

void KillPunct(char article[]) {
    int i, j = 0;
    for (i = 0; article[i] != 0; i += 1) {
        if (OneLetter(article[i])){
            article[j] = article[i];
            j += 1;
        }
        else if (!OneLetter(article[i])){
            article[j] = ' ';
            j += 1;
        }
    }
}

void MakeLower(char article[]) {
    int i = 0;
    for (i += 1; article[i] != 0; i += 1) {
        if (article[i] >= 'A' && article[i] <= 'Z')
            article[i] = article[i] + 32;
    }
}

void LowerDictionary(char dictionary[]){
    int i = 0;
    for (i; dictionary[i] != 0; i += 1){
        if (dictionary[i] >= 'A' && dictionary[i] <= 'Z'){
            dictionary[i] = dictionary[i] + 32;
        }
    }
}

int ArticleLength(char article[]){
    int count = 0;
    while (article[count] != 0)
        count += 1;
    return count;
}

void ArticleNextWord(char article[], char ArticleWord[], int ArticleLength, char DictionaryWord[], char dictionary[]){
    int j, i;
check:
    int counter = strlen(ArticleWord);
    while (!OneLetter(article[ArticlePosition])){
        if (article[ArticlePosition] == 0){
            return;
        }
        ArticlePosition += 1;
    }
    for (j = 0; article[ArticlePosition] != ' ' || ArticlePosition == ArticleLength; j += 1){
        ArticleWord[j] = article[ArticlePosition];
        ArticlePosition += 1;
    }
    if (counter < 2){
        goto check;
    }
    ArticleWord[j + 1] = 0;
    while (!strcmp(ArticleWord, DictionaryWord, strlen(ArticleWord))){
        DictionaryNextWord(dictionary, DictionaryWord);
    }
    if (strcmp(ArticleWord, DictionaryWord, strlen(ArticleWord)))
        return;
    printf(ArticleWord);
}
Was it helpful?

Solution

You need to include the header which defines strlen and strcmp

#include <string.h>

Later: Edits to your question have removed the other includes. You also need to #include <stdio.h>

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top