diff options
Diffstat (limited to 'lldb/examples/scripting/dictionary.c')
-rw-r--r-- | lldb/examples/scripting/dictionary.c | 179 |
1 files changed, 76 insertions, 103 deletions
diff --git a/lldb/examples/scripting/dictionary.c b/lldb/examples/scripting/dictionary.c index a7e1390..260eab4 100644 --- a/lldb/examples/scripting/dictionary.c +++ b/lldb/examples/scripting/dictionary.c @@ -6,13 +6,12 @@ // License. See LICENSE.TXT for details. // //===---------------------------------------------------------------------===// -#include <stdlib.h> -#include <stdio.h> #include <ctype.h> +#include <stdio.h> +#include <stdlib.h> #include <string.h> -typedef struct tree_node -{ +typedef struct tree_node { const char *word; struct tree_node *left; struct tree_node *right; @@ -22,22 +21,20 @@ typedef struct tree_node alphabet character and ends at the last alphabet character, i.e. it strips off beginning or ending quotes, punctuation, etc. */ -char * -strip (char **word) -{ +char *strip(char **word) { char *start = *word; - int len = strlen (start); + int len = strlen(start); char *end = start + len - 1; - while ((start < end) && (!isalpha (start[0]))) + while ((start < end) && (!isalpha(start[0]))) start++; - while ((end > start) && (!isalpha (end[0]))) + while ((end > start) && (!isalpha(end[0]))) end--; if (start > end) return NULL; - + end[1] = '\0'; *word = start; @@ -48,116 +45,95 @@ strip (char **word) each node), and a new word, inserts the word at the appropriate place in the tree. */ -void -insert (tree_node *root, char *word) -{ +void insert(tree_node *root, char *word) { if (root == NULL) return; - int compare_value = strcmp (word, root->word); + int compare_value = strcmp(word, root->word); if (compare_value == 0) return; - if (compare_value < 0) - { - if (root->left != NULL) - insert (root->left, word); - else - { - tree_node *new_node = (tree_node *) malloc (sizeof (tree_node)); - new_node->word = strdup (word); - new_node->left = NULL; - new_node->right = NULL; - root->left = new_node; - } + if (compare_value < 0) { + if (root->left != NULL) + insert(root->left, word); + else { + tree_node *new_node = (tree_node *)malloc(sizeof(tree_node)); + new_node->word = strdup(word); + new_node->left = NULL; + new_node->right = NULL; + root->left = new_node; } - else - { - if (root->right != NULL) - insert (root->right, word); - else - { - tree_node *new_node = (tree_node *) malloc (sizeof (tree_node)); - new_node->word = strdup (word); - new_node->left = NULL; - new_node->right = NULL; - root->right = new_node; - } + } else { + if (root->right != NULL) + insert(root->right, word); + else { + tree_node *new_node = (tree_node *)malloc(sizeof(tree_node)); + new_node->word = strdup(word); + new_node->left = NULL; + new_node->right = NULL; + root->right = new_node; } + } } /* Read in a text file and storea all the words from the file in a binary search tree. */ -void -populate_dictionary (tree_node **dictionary, char *filename) -{ +void populate_dictionary(tree_node **dictionary, char *filename) { FILE *in_file; char word[1024]; - in_file = fopen (filename, "r"); - if (in_file) - { - while (fscanf (in_file, "%s", word) == 1) - { - char *new_word = (strdup (word)); - new_word = strip (&new_word); - if (*dictionary == NULL) - { - tree_node *new_node = (tree_node *) malloc (sizeof (tree_node)); - new_node->word = new_word; - new_node->left = NULL; - new_node->right = NULL; - *dictionary = new_node; - } - else - insert (*dictionary, new_word); - } + in_file = fopen(filename, "r"); + if (in_file) { + while (fscanf(in_file, "%s", word) == 1) { + char *new_word = (strdup(word)); + new_word = strip(&new_word); + if (*dictionary == NULL) { + tree_node *new_node = (tree_node *)malloc(sizeof(tree_node)); + new_node->word = new_word; + new_node->left = NULL; + new_node->right = NULL; + *dictionary = new_node; + } else + insert(*dictionary, new_word); } + } } /* Given a binary search tree and a word, search for the word in the binary search tree. */ -int -find_word (tree_node *dictionary, char *word) -{ +int find_word(tree_node *dictionary, char *word) { if (!word || !dictionary) return 0; - int compare_value = strcmp (word, dictionary->word); + int compare_value = strcmp(word, dictionary->word); if (compare_value == 0) return 1; else if (compare_value < 0) - return find_word (dictionary->left, word); + return find_word(dictionary->left, word); else - return find_word (dictionary->right, word); + return find_word(dictionary->right, word); } /* Print out the words in the binary search tree, in sorted order. */ -void -print_tree (tree_node *dictionary) -{ +void print_tree(tree_node *dictionary) { if (!dictionary) return; if (dictionary->left) - print_tree (dictionary->left); - - printf ("%s\n", dictionary->word); + print_tree(dictionary->left); + printf("%s\n", dictionary->word); if (dictionary->right) - print_tree (dictionary->right); + print_tree(dictionary->right); } - -int -main (int argc, char **argv) -{ +int main(int argc, char **argv) { tree_node *dictionary = NULL; char buffer[1024]; char *filename; @@ -169,32 +145,29 @@ main (int argc, char **argv) if (!filename) return -1; - populate_dictionary (&dictionary, filename); - fprintf (stdout, "Dictionary loaded.\nEnter search word: "); - while (!done && fgets (buffer, sizeof(buffer), stdin)) - { - char *word = buffer; - int len = strlen (word); - int i; - - for (i = 0; i < len; ++i) - word[i] = tolower (word[i]); - - if ((len > 0) && (word[len-1] == '\n')) - { - word[len-1] = '\0'; - len = len - 1; - } - - if (find_word (dictionary, word)) - fprintf (stdout, "Yes!\n"); - else - fprintf (stdout, "No!\n"); - - fprintf (stdout, "Enter search word: "); + populate_dictionary(&dictionary, filename); + fprintf(stdout, "Dictionary loaded.\nEnter search word: "); + while (!done && fgets(buffer, sizeof(buffer), stdin)) { + char *word = buffer; + int len = strlen(word); + int i; + + for (i = 0; i < len; ++i) + word[i] = tolower(word[i]); + + if ((len > 0) && (word[len - 1] == '\n')) { + word[len - 1] = '\0'; + len = len - 1; } - - fprintf (stdout, "\n"); + + if (find_word(dictionary, word)) + fprintf(stdout, "Yes!\n"); + else + fprintf(stdout, "No!\n"); + + fprintf(stdout, "Enter search word: "); + } + + fprintf(stdout, "\n"); return 0; } - |