| | |
BST spell check
![]() |
•
•
Join Date: Oct 2008
Posts: 11
Reputation:
Solved Threads: 0
This program is suppose to be a spell checking program and I just can not get it to work can someone please take a look and let me know what I need to do to fix it
C Syntax (Toggle Plain Text)
#include <stdio.h> #include <string.h> #include <stdlib.h> //CONSTANTS #define wrdlen [48] #define linelen [1024] // A struct representing a node in a binary search tree struct BSTnode { char word[wrdlen];// The contents of the node struct BSTnode* left;// Links to the node's left and right children struct BSTnode* right; }; // Adds a new node to the tree. Duplicates are disallowed. Returns 1 if a // new node was added, returns 0 if newdata was already in the tree int insert(struct BSTnode** root, char newword[wrdlen]) { // If we've reached the right place to insert, create a new node and add it in if( (*root) == NULL) { (*root) = (struct BSTnode*)malloc(sizeof(struct BSTnode)); strcpy((*root)->word,newword); (*root)->left = NULL; (*root)->right = NULL; return 1; } // Otherwise, search for the correct place to insert if(strcmp(newword,(*root)->word)<0) { return insert( &((*root)->left), newword); } else if(strcmp(newword,(*root)->word)>0) { return insert( &((*root)->right), newword); } // If the new data is neither less than nor greater than the the data at // the current node, it must be equal, and duplicates are not allowed else return 0; } // Returns 1 if target is in the tree and 0 otherwise int search(struct BSTnode* root, char target[wrdlen]) { // An empty tree contains nothing, much less target if(root == NULL) return 0; // If the current node is what we're looking for, we've found it if(strcmp(root->word,target) == 0) return 1; // If what we're looking for is smaller than this node, it must be in // the left subtree if it exists if(strcmp(target,root->word) < 0) return search(root->left, target); // Similarly, if the target is greater than this node, it can only be in // the right subtree else return search(root->right, target); } // An iterative version of the search algorithm int searchiterative(struct BSTnode* root, char target[wrdlen]) { struct BSTnode* crnt = root; // Keep descending through the tree until we reach the bottom or find what // we're looking for while(crnt != NULL && strcmp(crnt->word,target)!=0) { if(strcmp(target,crnt->word)>0) crnt = crnt->left; else crnt = crnt->right; } // If we reached the bottom of the tree, then the target isn't present, // otherwise we found what we're looking for if(crnt == NULL) return 0; else return 1; } void spellcheck(struct BSTnode* root, char *token, int line) { //capital letters are from 65 -> 90 //lowercase letters are from 97-122 if(search(root, token))//if you find it normally then return; else if(token[0] >= 65 && token[0] <= 90) { token[0] = token[0] + 32; if(search(root, token)) return; else { token[0] = token[0] - 32; printf("Line %d: %s\n", line, token); return; } } else { printf("Line %d: %s\n", line, token); return; } } int main(void) { FILE *ifp; //dictionary file FILE *scfp; //file to be spellchecked char infile[wrdlen]; //"words.txt"; char Tinfile[wrdlen]; //"test.txt"; //test file int valid = 0; struct BSTnode* root; char newword[wrdlen]; root = NULL; int i = 0; char str[linelen]; char delims[] = ("~!@#$%^&*()-_=+[]{}\\|;:\'\",.<>/?\n\r\t "); //ask the user for the dictionary file while(!valid) { printf("Please enter the name of the dictionary file you wish to access\n"); scanf("%s", infile); ifp = fopen(infile, "r"); if(ifp == NULL) printf("sorry, could not find that file!\n"); else { valid = 1; printf("Reading file now.........\n"); } } valid = 0; //read in all the words and place them into a BST while(!feof(ifp)) { fscanf(ifp, "%s ", newword); insert(&root, newword); } //ask the user for the file to be spellchecked while(!valid) { printf("what is the name of the file you would like to spellcheck?\n"); scanf("%s", Tinfile); scfp = fopen(Tinfile, "r"); if(scfp == NULL) printf("sorry, could not find that file!\n"); else { valid = 1; printf("Reading file now.........\n"); } } printf("The following words were not recognized: \n"); for(i = 1; !feof(scfp); i++) { fgets(str, linelen, scfp); char *token; token = strtok(str, delims); while( token != NULL ) { spellcheck(root, token, i); token = strtok( NULL, delims ); } } system("PAUSE"); return; }
•
•
Join Date: Oct 2008
Posts: 11
Reputation:
Solved Threads: 0
Here is the new code I have got it down to just three errors. yea! I can still use some help with it though
C Syntax (Toggle Plain Text)
#include <stdio.h> #include <string.h> #include <stdlib.h> //CONSTANTS #define wrdlen 48 #define linelen 1024 // A struct representing a node in a binary search tree struct BSTnode { char word[wrdlen];// The contents of the node struct BSTnode* left;// Links to the node's left and right children struct BSTnode* right; }; // Adds a new node to the tree. Duplicates are disallowed. Returns 1 if a // new node was added, returns 0 if newdata was already in the tree int insert(struct BSTnode** root, char newword[wrdlen]) { // If we've reached the right place to insert, create a new node and add it in if( (*root) == NULL) { (*root) = (struct BSTnode*)malloc(sizeof(struct BSTnode)); strcpy((*root)->word,newword); (*root)->left = NULL; (*root)->right = NULL; return 1; } // Otherwise, search for the correct place to insert if(strcmp(newword,(*root)->word)<0) { return insert( &((*root)->left), newword); } else if(strcmp(newword,(*root)->word)>0) { return insert( &((*root)->right), newword); } // If the new data is neither less than nor greater than the the data at // the current node, it must be equal, and duplicates are not allowed else return 0; } // Returns 1 if target is in the tree and 0 otherwise int search(struct BSTnode* root, char target[wrdlen]) { // An empty tree contains nothing, much less target if(root == NULL) return 0; // If the current node is what we're looking for, we've found it if(strcmp(root->word,target) == 0) return 1; // If what we're looking for is smaller than this node, it must be in // the left subtree if it exists if(strcmp(target,root->word) < 0) return search(root->left, target); // Similarly, if the target is greater than this node, it can only be in // the right subtree else return search(root->right, target); } // An iterative version of the search algorithm int searchiterative(struct BSTnode* root, char target[wrdlen]) { struct BSTnode* crnt = root; // Keep descending through the tree until we reach the bottom or find what // we're looking for while(crnt != NULL && strcmp(crnt->word,target)!=0) { if(strcmp(target,crnt->word)>0) crnt = crnt->left; else crnt = crnt->right; } // If we reached the bottom of the tree, then the target isn't present, // otherwise we found what we're looking for if(crnt == NULL) return 0; else return 1; } void spellcheck(struct BSTnode* root, char *token, int line) { //capital letters are from 65 -> 90 //lowercase letters are from 97-122 if(search(root, token))//if you find it normally then return; else if(token[0] >= 65 && token[0] <= 90) { token[0] = token[0] + 32; if(search(root, token)) return; else { token[0] = token[0] - 32; printf("Line %d: %s\n", line, token); return; } } else { printf("Line %d: %s\n", line, token); return; } } int main(void) { FILE *ifp; //dictionary file FILE *scfp; //file to be spellchecked char infile[wrdlen]; //"words.txt"; char Tinfile[wrdlen]; //"test.txt"; //test file int valid = 0; struct BSTnode* root; char newword[wrdlen]; int i = 0; char str[linelen]; char delims[] = {"~!@#$%^&*()-_=+[]{}\\|;:\'\",.<>/?\n\r\t ""}; char *token; //ask the user for the dictionary file while(!valid) { printf("Please enter the name of the dictionary file you wish to access\n"); scanf("%s", infile); ifp = fopen(infile, "r"); if(ifp == NULL) printf("sorry, could not find that file!\n"); else { valid = 1; printf("Reading file now.........\n"); } } valid = 0; //read in all the words and place them into a BST while(!feof(ifp)) { fscanf(ifp, "%s ", newword); insert(&root, newword); } //ask the user for the file to be spellchecked while(!valid) { printf("what is the name of the file you would like to spellcheck?\n"); scanf("%s", Tinfile); scfp = fopen(Tinfile, "r"); if(scfp == NULL) printf("sorry, could not find that file!\n"); else { valid = 1; printf("Reading file now.........\n"); } } printf("The following words were not recognized: \n"); for(i = 1; !feof(scfp); i++) { fgets(str, linelen, scfp); token = strtok(str, delims); while( token != NULL ) { spellcheck(root, token, i); token = strtok( NULL, delims ); } } system("PAUSE"); return 0; }
•
•
Join Date: Oct 2008
Posts: 11
Reputation:
Solved Threads: 0
I got all the errors fixed but now it is crashing. it crashes when the program reads the dictionary file
C Syntax (Toggle Plain Text)
#include <stdio.h> #include <string.h> #include <stdlib.h> //CONSTANTS #define wrdlen 48 #define linelen 1024 // A struct representing a node in a binary search tree struct BSTnode { char word[wrdlen];// The contents of the node struct BSTnode* left;// Links to the node's left and right children struct BSTnode* right; }; // Adds a new node to the tree. Duplicates are disallowed. Returns 1 if a // new node was added, returns 0 if newdata was already in the tree int insert(struct BSTnode** root, char newword[wrdlen]) { // If we've reached the right place to insert, create a new node and add it in if( (*root) == NULL) { (*root) = (struct BSTnode*)malloc(sizeof(struct BSTnode)); strcpy((*root)->word,newword); (*root)->left = NULL; (*root)->right = NULL; return 1; } // Otherwise, search for the correct place to insert if(strcmp(newword,(*root)->word)<0) { return insert( &((*root)->left), newword); } else if(strcmp(newword,(*root)->word)>0) { return insert( &((*root)->right), newword); } // If the new data is neither less than nor greater than the the data at // the current node, it must be equal, and duplicates are not allowed else return 0; } // Returns 1 if target is in the tree and 0 otherwise int search(struct BSTnode* root, char target[wrdlen]) { // An empty tree contains nothing, much less target if(root == NULL) return 0; // If the current node is what we're looking for, we've found it if(strcmp(root->word,target) == 0) return 1; // If what we're looking for is smaller than this node, it must be in // the left subtree if it exists if(strcmp(target,root->word) < 0) return search(root->left, target); // Similarly, if the target is greater than this node, it can only be in // the right subtree else return search(root->right, target); } // An iterative version of the search algorithm int searchiterative(struct BSTnode* root, char target[wrdlen]) { struct BSTnode* crnt = root; // Keep descending through the tree until we reach the bottom or find what // we're looking for while(crnt != NULL && strcmp(crnt->word,target)!=0) { if(strcmp(target,crnt->word)>0) crnt = crnt->left; else crnt = crnt->right; } // If we reached the bottom of the tree, then the target isn't present, // otherwise we found what we're looking for if(crnt == NULL) return 0; else return 1; } void spellcheck(struct BSTnode* root, char *token, int line) { //capital letters are from 65 -> 90 //lowercase letters are from 97-122 if(search(root, token))//if you find it normally then return; else if(token[0] >= 65 && token[0] <= 90) { token[0] = token[0] + 32; if(search(root, token)) return; else { token[0] = token[0] - 32; printf("Line %d: %s\n", line, token); return; } } else { printf("Line %d: %s\n", line, token); return; } } int main(void) { FILE *ifp; //dictionary file FILE *scfp; //file to be spellchecked char infile[wrdlen]; //"words.txt"; char Tinfile[wrdlen]; //"test.txt"; //test file int valid = 0; struct BSTnode* root; char newword[wrdlen]; int i = 0; char str[linelen]; char delims[] = {"~!@#$%^&*()-_=+[]{}\\|;:\'\",.<>/?\n\r\t "}; char *token; //ask the user for the dictionary file while(!valid) { printf("Please enter the name of the dictionary file you wish to access\n"); scanf("%s", infile); ifp = fopen(infile, "r"); if(ifp == NULL) printf("sorry, could not find that file!\n"); else { valid = 1; printf("Reading file now.........\n"); } } valid = 0; //read in all the words and place them into a BST while(!feof(ifp)) { fscanf(ifp, "%s ", newword); insert(&root, newword); } //ask the user for the file to be spellchecked while(!valid) { printf("what is the name of the file you would like to spellcheck?\n"); scanf("%s", Tinfile); scfp = fopen(Tinfile, "r"); if(scfp == NULL) printf("sorry, could not find that file!\n"); else { valid = 1; printf("Reading file now.........\n"); } } printf("The following words were not recognized: \n"); for(i = 1; !feof(scfp); i++) { fgets(str, linelen, scfp); token = strtok(str, delims); while( token != NULL ) { spellcheck(root, token, i); token = strtok( NULL, delims ); } } system("PAUSE"); return 0; }
![]() |
Other Threads in the C Forum
- Previous Thread: Help For Finding The Longest Monotone SubSequence
- Next Thread: fax2tiff fax file?
| Thread Tools | Search this Thread |
#include adobe ansi api array asterisks binarysearch changingto char character cm copyimagefile cprogramme creafecopyofanytypeoffileinc createcopyoffile csyntax database directory dynamic execv feet fgets file fork forloop frequency function getlasterror givemetehcodez global grade graphics gtkgcurlcompiling hacking hardware highest histogram i/o include incrementoperators infiniteloop input interest kernel keyboard kilometer license linked linkedlist linux linuxsegmentationfault list locate logical_drives looping loopinsideloop. lowest match matrix meter microsoft motherboard mqqueue mysql number odf opensource owf pattern pdf performance pointer posix probleminc process program programming radix recursion recv repetition research reversing scanf segmentationfault sequential shape socket socketprograming standard string systemcall threads turboc unix user voidmain() wab windows.h windowsapi






